javascript - 如何在 JavaScript 中从原型(prototype)创建对象?

标签 javascript prototypal-inheritance

我是 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/

相关文章:

javascript - 如何为大型且可维护的应用程序构建 angularJS 模型?

javascript - 某些 CSS 元素(链接、样式)不会在悬停时打开或加载,直到我单击该页面

javascript - 单击选择元素时 Bootstrap4 下拉菜单自动折叠

javascript - 如何专门化一个 Javascript 类?

javascript - __proto__ VS。 JavaScript 中的原型(prototype)

javascript - Firebase 验证规则正则表达式不起作用

javascript - 正则表达式用逗号分隔,但不在方括号中且不在方括号中

javascript - 为对象字面量设置原型(prototype)

Javascript 静态方法与性能上的原型(prototype)/实例化方法

javascript - 如何避免在 Javascript 原型(prototype)中使用 "this"