想请教一下各位,
这段代码为何返回的不是2?
var B=function(obj){
if(obj){
return obj;
}
}
console.log(new B(2)) //输出:B{}
,而如果参数是引用类型就会返回参数,呵呵
console.log(new B([1,2,3])) //输出:[1,2,3]
想请教一下各位,
这段代码为何返回的不是2?
var B=function(obj){
if(obj){
return obj;
}
}
console.log(new B(2)) //输出:B{}
,而如果参数是引用类型就会返回参数,呵呵
console.log(new B([1,2,3])) //输出:[1,2,3]
JS使用new实现创建对象,大致3步:
1.obj=new Object();
2.constructor.call(obj);
3.obj.prototype=constructor.prototype
默认返回obj;如果需要返回自定义数据,必须是对象,你只是返回一数值类型,所以只是一个对象{};如果要返回2,需要使用
return {num:2};就会返回这个对象
可以这么来理解,第一次你输入的是2,2是一个纯粹最基本基础类型。(他不是对象),所以你将2传入的时候,因为在B这个函数中并没有赋初值,所以,这个函数就直接当成构造函数,就创建了一个空对象。而你传入一个数组的时候,因为数组也是一个对象,所以返回数组。还有就是,new这个关键字在js中其实并没有像其他面向对象语言一样实例化了一个对象(因为js本身没有类,而全是对象),而只是创建了一个空对象(如果有赋初值就赋予对象中的属性)。
27 回答13k 阅读
8 回答3.5k 阅读✓ 已解决
6 回答1.3k 阅读✓ 已解决
5 回答5.3k 阅读✓ 已解决
4 回答1.6k 阅读✓ 已解决
3 回答1.7k 阅读
4 回答2.3k 阅读✓ 已解决
JS就是这样的,当构造函数中没用
return
时返回this
,有return
且返回的为对象时返回该对象,否则仍然返回this