gpt4 book ai didi

javascript - Javascript 中的新对象是否具有原型(prototype)属性?

转载 作者:可可西里 更新时间:2023-11-01 01:23:25 24 4
gpt4 key购买 nike

这是一个具有学术值(value)的纯粹微不足道的问题:

如果我创建一个新对象,要么通过:

var o = { x:5, y:6 };

var o = Object.create({ x:5, y:6 });

当我查询 o.prototype 属性时,我得到了 undefined。我认为任何新创建的对象都会自动继承 Object.prototype 原型(prototype)。

此外,在此对象上调用toString()(Object.prototype 的一种方法)工作得很好,这意味着o 确实继承自 Object.prototype。那么为什么我会得到 undefined 呢?

最佳答案

实例及其构造函数之间存在差异。

当创建像 {a: 1} 这样的对象时,您正在创建 Object 构造函数的实例。 Object.prototype 确实可用,并且该原型(prototype)中的所有函数都可用:

var o = {a: 1};
o.hasOwnProperty === Object.prototype.hasOwnProperty; // true

但是 Object.create 做了一些不同的事情。它创建一个实例(一个对象),但插入一个额外的原型(prototype)链:

var o = {a: 1};
var p = Object.create(o);

链将是:

Object.prototype  -  o  -  p

这意味着:

p.hasOwnProperty === Object.prototype.hasOwnProperty; // true
p.a === o.a; // true

要获取实例“下”的原型(prototype),您可以使用 Object.getPrototypeOf:

var o = {a: 1};
var p = Object.create(o);

Object.getPrototypeOf(p) === o; // true
Object.getPrototypeOf(o) === Object.prototype; // true

(以前,您可以使用 o.__proto__ 访问实例的原型(prototype),但这已被弃用。)

请注意,您还可以按如下方式访问原型(prototype):

o.constructor === Object; // true

所以:

o.constructor.prototype === Object.prototype // true
o.constructor.prototype === Object.getPrototypeOf(o); // true

对于 Object.create 创建的对象,这会失败,因为它们没有构造函数(或者更确切地说,它们的构造函数是 Object 而不是您传递给 的对象Object.create 因为构造函数不存在)。

关于javascript - Javascript 中的新对象是否具有原型(prototype)属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7929159/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com