【问题标题】:javascript: question about constructor **new** keywordjavascript: 关于构造函数 **new** 关键字的问题
【发布时间】:2011-05-12 03:38:36
【问题描述】:

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

当 JavaScript 看到 new 操作符时, 它创建一个新的通用对象和 将此新对象作为 WorkerBee 的 this 关键字 构造函数。构造函数 函数显式设置 该项目的财产,并隐含 设置内部的值 proto 属性为 WorkerBee.prototype 的值。 (那个属性 名称有两个下划线字符 前面和最后两个。) proto 属性确定用于返回的原型链 属性值。一旦这些属性 已设置,JavaScript 返回新的 对象和赋值语句 将变量标记设置为该对象。

所以基本上如果我们有这个功能:

function Bee(first_name, second_name){
    this.FirstName=name;
    this.SecondName=name;
}

我想知道像 var bee1 = new Bee("qwe", "asd"); 与:

之类的操作有什么区别
var bee1={};
bee1.__proto__=Bee.prototype;
var r=Bee.call(bee1, "qwe", "asd");
if(r!==undefined){
    bee1=r;
}

【问题讨论】:

    标签: javascript constructor ecmascript-5


    【解决方案1】:

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

    另一方面,它的代码更少,乍一看更有意义。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-13
      • 1970-01-01
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 2020-11-16
      • 2015-01-21
      • 2022-06-13
      相关资源
      最近更新 更多