Javascript - getPrototypeOf不返回父原型

时间:2017-05-04 05:46:06

标签: javascript

我有以下Javascript代码段:`

        var alien = {
            kind: "alien"
        };

        var person = {
            kind: "human"
        };

        var zack = Object.create(person);

        alert(Object.getPrototypeOf(zack));

    </script>

`

不确定为什么它显示zack的原型是Object而不是person。谢谢 enter image description here

3 个答案:

答案 0 :(得分:1)

它也是person。但是人是一个对象。alert()不会显示console.log()。如果您需要使用JSON.stringify() <警告显示/ p>

How can I view an object with an alert()

&#13;
&#13;
var alien = {
  kind: "alien"
};

var person = {
  kind: "human"
};

var zack = Object.create(person);

console.log(Object.getPrototypeOf(zack));

alert(JSON.stringify(Object.getPrototypeOf(zack)))
&#13;
&#13;
&#13;

答案 1 :(得分:1)

试一试。我稍微清理了一下代码,并使用类的标准命名约定以大写字母开头。同样使用控制台进行记录,昨天发出警报。

// Define the Alien class, always start with an uppercase
var Alien = function() {

};

// Setup it's prototype
Alien.prototype = {
  kind: 'alien',
  grab: function() {
    return 'grabby grab';
  }
}

// Define a Person class
var Person = function() {
    this.kind = "human";
};

// Copy Alien prototype to Person
Person.prototype = Object.create(Alien.prototype);

// Create a new instance of of Person
var zack = new Person();

// See what's inside
console.log('Prototype function call: ' + zack.grab());
console.log('Zack is a: ' + zack.kind);
console.log('Zack is secretly a: ' + Object.getPrototypeOf(zack).kind);

console.log(Object.getPrototypeOf(zack));

答案 2 :(得分:1)

您看到[object Object]的原因是因为当您警告Object.getPrototypeOf(zack)时,对象需要转换为字符串以显示在警报中。现在,调用默认的toString()方法Object.prototype.toString,返回对象的字符串表示形式。如果要在警报中真正显示一些有意义的文本,则需要在toString对象本身上实现person方法。这样做会在toString()函数中显示您自己的文本。这种情况发生的原因是函数查找在javascript中发生的方式。首先,查看对象,然后是原型,然后进一步进入原型链。由于在这种情况下查找会在对象级别本身成功,因此Object.prototype.toString函数不会被调用,您将在alert框中看到自己的文本。

&#13;
&#13;
var alien = {
  kind: "alien"
};

var person = {
  kind: "human"
};
person.toString = function () {
	return "I am '"+this.kind+"' kind of object";
}

var zack = Object.create(person);

alert(Object.getPrototypeOf(zack));
&#13;
&#13;
&#13;