javascript:关于构造函数的问题**新**关键字

时间:2011-05-12 03:38:37

标签: javascript constructor ecmascript-5

来自页面https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Details_of_the_Object_Model

  

当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;
}

1 个答案:

答案 0 :(得分:4)

首先,var bee1 = new Bee("qwe", "asd");是跨浏览器兼容的。有些浏览器不会让你弄乱对象的__proto__字段 - IE就是其中之一。

另一方面,代码较少,乍看之下更有意义。

此外,在第二个示例中,从第一行开始,您已创建bee1但尚未初始化它。从第二行开始,系统会将其视为Bee,但它仍然没有像一个那样构建。如果构造函数或创建和构造之间的任何其他地方出现问题,您最终可能会得到一个半生不熟的Bee。这与new Bee(...)相反,后者可以返回正确构造的Bee或抛出异常。