如何在 JavaScript 中从原型创建对象
How to create an object from a prototype in JavaScript?
我是 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
。
在 create2
中,您将创建一个对象并在其上创建一个名为 prototype
的属性。在这种情况下,原型链没有建立。
这就是为什么create2
创建的对象无法沿着原型链向上找到status
的原因。
注意:在第二种情况下,您仍然可以执行
document.writeln(c2.prototype.status);
在create2方法中,如果您需要标准原型而不是标准"原型"。如果你想让它工作,你需要使用Object.setPrototypeOf(o, proto)
新创建的属性"原型"将是具有符号链接到父对象。
function create(proto) {
var F = function() { };
F.prototype = proto;
return new F();
}
function create2(proto) {
var o = { };
Object.setPrototypeOf(o, proto);
return o;
}
var o = { }, c1 = create(o), c2 = create2(o);
o.status = 'OK';
console.log(c1.status);
console.log(c2.status);
相关文章:
- 在创建对象后附加一个jquery事件
- 错误:自动化服务器可以't创建对象
- 如何在不使用 new 关键字的情况下从函数创建对象
- 文本表示法VS.构造函数,用于在JavaScript中创建对象
- 创建对象函数原型和代码是错误的
- 使用Undercore创建对象集合
- ES6 const,用于在JavaScript中创建对象原型;这是一种模式吗
- 在Vanilla Javascript中使用窗体中的对象原型创建多个用户
- 使用原型和对象文字表示法创建对象之间的区别
- 如何在 JavaScript 中从原型创建对象
- 如何使用原型创建基元包装器对象
- 在不创建对象实例的情况下访问原型属性
- 如何从原型方法创建对象的实例
- 在javascript中,当原型继承比闭包更适合创建对象时
- 正在原型构造函数中创建对象引用
- 创建对象后更新原型的属性
- Javascript:从已经实例化的对象和原型中创建对象
- 如何从一个没有原型的对象中创建一个带有默认原型的JS对象
- 创建对象后设置原型属性的可移植方法是什么?
- Javascript对象原型和对象.创建方法