:
当JavaScript看到新运算符时, 它创建了一个新的通用对象和 将此新对象作为值传递 this关键字到WorkerBee 构造函数。构造函数 函数显式设置的值 项目属性,并含蓄地 设置内部的值 proto 属性为WorkerBee.prototype的值。 (那个属性 name有两个下划线字符 前面和后面两个。) proto 属性确定用于返回的原型链 财产价值。一旦这些属性 设置,JavaScript返回新的 对象和赋值语句 将变量标记设置为该对象。
所以基本上如果我们有这个功能:
function Bee(first_name, second_name){
this.FirstName=name;
this.SecondName=name;
}
我想知道做一些像 var bee1 = new Bee(“qwe”,“asd”); vs:
之间的区别var bee1={};
bee1.__proto__=Bee.prototype;
var r=Bee.call(bee1, "qwe", "asd");
if(r!==undefined){
bee1=r;
}
答案 0 :(得分:4)
首先,var bee1 = new Bee("qwe", "asd");
是跨浏览器兼容的。有些浏览器不会让你弄乱对象的__proto__
字段 - IE就是其中之一。
另一方面,代码较少,乍看之下更有意义。
此外,在第二个示例中,从第一行开始,您已创建bee1
但尚未初始化它。从第二行开始,系统会将其视为Bee
,但它仍然没有像一个那样构建。如果构造函数或创建和构造之间的任何其他地方出现问题,您最终可能会得到一个半生不熟的Bee
。这与new Bee(...)
相反,后者可以返回正确构造的Bee
或抛出异常。