【问题标题】:How do i call 'f.prototype' correctly?如何正确调用“f.prototype”?
【发布时间】:2013-04-02 18:37:03
【问题描述】:

给定一个javascript函数

var f = function();

据我了解,我会调用Object.getProtoypeOf(f)“f 的原型”。

f.prototype 的正确术语是什么?

“使用 f 作为构造函数构造的 Prototype 对象将会得到”听起来有点冗长 ;)

【问题讨论】:

  • f的原型有什么问题?
  • 两者之间存在差异,可通过f.prototype != Object.getPrototypeOf(f) 进行测试。 f.prototype是通过new f()get创建的Prototype对象,但不是f的protoype
  • 看看documentationf.__proto__ === Object.getPrototypeOf(f)。顺便说一句,您是想对prototypes 做点什么,还是只是想知道它们?
  • 我不明白f.__proto__ == Object.getPrototypeOf(f) 与我的问题有何关联。我不是想知道 原型是如何工作的,我想知道讨论它们的正确术语是什么。
  • f.constructor.prototype 这与 Object.getPrototypeOf(f) 相同,也许您可​​以在这里找到问题的答案ejohn.org/blog/objectgetprototypeof

标签: javascript nomenclature


【解决方案1】:

在这里查看:http://jsfiddle.net/UCmW8/

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

Person.prototype.sayHi = function() {
    alert(this.name + ' says hi!');
};

var matt = new Person('Matt');
matt.sayHi() // alerts 'Matt says hi!'

console.log('matt.prototype',                matt.prototype);
console.log('Object.getPrototypeOf(matt)',   Object.getPrototypeOf(matt));
console.log('Person.prototype',              Person.prototype);
console.log('Object.getPrototypeOf(Person)', Object.getPrototypeOf(Person));

这会产生什么?

第一个matt.prototypeundefined。函数有一个原型对象,当该函数用作构造函数时,实例可以使用它的属性,但实例本身没有prototype 属性。

Object.getPrototypeOf(matt) 找到真正的原型。如您所见,这与Person.prototype 相同。它允许您获取原型,而无需引用构造函数。

最后,如果我们尝试Object.getPrototypeOf(Person),我们会得到一些奇怪的东西。我们的构造函数,毕竟是一个函数。将您创建的函数想象为一些 Function 构造函数的实例,并具有它自己的原型。因此,当您执行此操作时,您正在获取 所有函数 的原型对象。

【讨论】:

  • 您的帖子是准确的,但没有回答我的问题。我不知道 f.prototype 和 f 的原型有什么区别。我正在寻找正确的条款来讨论它们。
猜你喜欢
  • 2020-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-13
  • 2019-08-27
  • 2021-10-28
  • 2016-06-28
相关资源
最近更新 更多