【问题标题】:Can't see prototype of object in JS Console Chrome在 JS 控制台 Chrome 中看不到对象的原型
【发布时间】:2014-05-04 12:04:26
【问题描述】:

我正在尝试通过使用 Chrome 开发者控制台来了解原型继承。这是我用来设置原型链的代码:

var Organism = Object.create(null);
undefined
var Animal = Object.create(Organism);
undefined
var Mammal = Object.create(Animal);
undefined
var Dog = Object.create(Mammal);
undefined
var Spot = Object.create(Dog);
undefined

我可以为有机体和哺乳动物对象添加一些属性:

Mammal.hasHair = true;
true
Organism.hasHair = false;
false

接下来我为 Dog 对象定义一些变量:

Dog.numLegs = 4;
4
Dog.speak = function(){return 'woof, woof!';};
function (){return 'woof, woof!';}

最后我为 Spot 定义了一些变量

Spot.color = 'White';
"White"
Spot.pattern = 'Spots';
"Spots"
Spot.patternColor = 'Black';
"Black"
Spot.weight = 22
22

但是由于某种原因,当我检查 Dog 对象时,它会输出这样的属性,但我看不到它的原型...

Spot;
Object {color: "White", pattern: "Spots", patternColor: "Black", weight: 22}

或者如果我尝试这个我仍然看不到它的原型......

dir(Spot);
Object
color: "White"
pattern: "Spots"
patternColor: "Black"
weight: 22

如果我没记错的话,我应该没有一个名为_proto_ 的属性,它指向Dog Object 的原型,即哺乳动物?如何检查对象以查看此属性?

【问题讨论】:

  • 顺便说一句,它是__proto__(每边两个下划线),而不是_proto_

标签: javascript google-chrome prototypal-inheritance


【解决方案1】:

您需要使用 Object 构造函数的原型来创建第一个对象,如下所示:

var Organism = Object.create(Object.prototype);

使用 null 作为原型创建对象将创建一个完全没有属性的对象,包括 _proto_

要更深入地了解 Object.create,请查看: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create

【讨论】:

    【解决方案2】:

    使用var Organism = new Object(null); 等确实创建了一个原型对象,并按预期工作。

    我并不完全理解这一点,但这似乎是由于没有构造函数就没有创建原型。因此,在构造new Object() 时,您创建了一个原型。但是,Object.create() 只返回一个对象,如果您尝试new Object.create(),很明显这不是构造函数。

    值得一读的构造函数和原型: http://tobyho.com/2010/11/22/javascript-constructors-and/

    我希望得到更全面的答案,因为我也希望返回的对象中有一个原型。按照您的步骤,我复制了相同的结果。

    【讨论】:

      猜你喜欢
      • 2023-03-05
      • 2015-01-21
      • 2012-02-26
      • 1970-01-01
      • 1970-01-01
      • 2017-08-10
      • 1970-01-01
      • 2014-02-08
      • 1970-01-01
      相关资源
      最近更新 更多