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

javascript: question about constructor **new** keyword

本文关键字:关键字 问题 构造函数 JavaScript      更新时间:2023-09-26

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

当 JavaScript 看到新的运算符时, 它创建一个新的泛型对象,并且 将此新对象作为值传递 这个关键字到工人蜜蜂 构造函数。构造函数 函数显式设置 项目属性,并且隐式 设置内部的值 Proto 属性到 WorkerBee.prototype 的值。(该属性 名称有两个下划线字符,位于 前面和最后两个。这 原型属性确定用于返回的原型链 属性值。一旦这些属性 设置,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;
}

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

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

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