JavaScript:关于构造函数**新**关键字的问题
javascript: question about constructor **new** keyword
来自页面 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
,要么抛出一个异常。
相关文章:
- 在指令控制器中使用$attrs时出现问题
- 将PHP变量传递给jQuery时遇到问题
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- 参数变量出现ngTable指令问题
- 剑道网格jQuery动画()问题
- 我的jQuery插件参数没有正确启动,遇到了问题
- 使用“;这个“;JavaScript原型方法中的关键字
- Phonegap-(安卓/iphone)多个图像的图像库出现问题
- TableExport jquery插件:文件名和扩展名问题
- delete关键字在全局变量上的不同行为
- JavaScript Pub/Sub属性访问问题
- 当在数组中找到关键字时,在对象中循环以提取属性名称的问题
- let关键字的问题
- 闭包和“this”的问题关键字
- “this”的继承与问题关键字
- 未知关键字确保问题
- Safari是否有ES6关键字'let'的问题?
- 谷歌关闭绑定/解决这个关键字的问题
- JavaScript:关于构造函数**新**关键字的问题
- JavaScript中的关键字问题