0

对于以下代码,我想知道为什么Object.getPrototypeOf(person)有效,但person.getPrototypeOf(person)不起作用?我认为规则是:如果对象没有这样的属性或方法,它会沿着原型链上去尝试获取它,然后调用它this(例如对象的上下文在Animal.getName.call(this)哪里)。那么在那种情况下,应该成为并且应该工作呢?thiswoofieperson.getPrototypeOf(person)Object.getPrototypeOf.call(person, person)

function Person(name) {
    this.name = name;
}

var person = new Person("Ang Lee")

console.log("the prototype of person is", Object.getPrototypeOf(person));

更新:对于说getPrototypeOf是静态方法的答案,这是否意味着:

function Person(name) {
    this.name = name;
    this.foo = function() { ... }
}

Person.bar = function() { ... }

foo是“在链中”,并且可以被任何继承的对象调用,而bar不是,bar就像getPrototypeOf,这是一个静态方法?

4

3 回答 3

2

Object.getPrototypeOfObject 类型本身的属性,而不是 of 的prototype属性Object

因为它实际上不在原型链中,所以在调用person.getProtoTypeOf().

它更类似于在其他 OO 语言中看到的“静态方法”。

于 2012-09-30T13:56:42.503 回答
1

.getPrototypeOf是一个函数 put on Object,而不是它的原型。如果需要,您可以查找它:

"getPrototypeOf" in Object.prototype; // false
于 2012-09-30T13:59:21.687 回答
1

如果getPrototypeOf是包含在 中的方法Object.prototype,那么它也可以在 类型的对象上使用Person,但是,getPrototypeOf附加到Object,这只是Object实例的构造函数,而不是原型。

出于某种原因,Javascript 的创建者决定将原型附加到构造函数,反之亦然;如果他们没有做出这样有问题的决定,你就不必问这个问题。

PS任何对基于原型的对象继承的更优雅/干净的实现感兴趣的人都可以查看http://iolanguage.com/

于 2012-09-30T13:59:31.453 回答