我有以下Javascript代码段:`
var alien = {
kind: "alien"
};
var person = {
kind: "human"
};
var zack = Object.create(person);
alert(Object.getPrototypeOf(zack));
</script>
`
答案 0 :(得分:1)
它也是person
。但是人是一个对象。alert()
不会显示console.log()
。如果您需要使用JSON.stringify()
<警告显示/ p>
How can I view an object with an alert()
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;
答案 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
框中看到自己的文本。
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;