我是 JavaScript 新手,目前正在阅读《JavaScript:The Good Parts》一书。我试图理解以下内容:
function create(proto) {
var F = function() { };
F.prototype = proto;
return new F();
}
function create2(proto) {
var o = { };
o.prototype = proto;
return o;
}
var o = { }, c1 = create(o), c2 = create2(o);
o.status = 'OK';
document.writeln(c1.status);
document.writeln(c2.status);
create(proto)
是书中的实现方式。
create2(proto)
是我认为它应该工作的方式。
显然,书中的示例有效,而我的示例无效,因此输出为:
OK
undefined
现在我的问题是:为什么 create2(proto)
不像 create(proto)
那样工作?
最佳答案
在create
中,您将借助构造函数(new F()
)创建一个新对象。这样,proto
对象和用构造函数构造的对象之间就建立了原型(prototype)链。
在 create2
中,您将创建一个对象并在其上创建一个名为 prototype
的属性。此时原型(prototype)链并未建立。
这就是为什么create2
创建的对象无法沿着原型(prototype)链向上查找status
。
注意:在第二种情况下,您仍然可以这样做
document.writeln(c2.prototype.status);
关于javascript - 如何在 JavaScript 中从原型(prototype)创建对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27468449/