JS函数是什么;用于的原型属性
What does a JS function's prototype property used for?
我通过__proto__
属性了解javascript原型继承。但是,我注意到,当我这样做时,除了__proto__
属性外,var f = function() {}
f现在还将具有prototype
属性。prototype
似乎不参与属性链接。到底做了什么?
它被指定为通过new
关键字使用该函数创建的对象的原型。
例如:
function Foo() {
}
Foo.prototype.bar = 47;
var obj = new Foo();
alert(obj.bar); // alerts 47, via `obj`'s prototype
obj
和分配给Foo.prototype
的对象之间的引用是活动的,因此向Foo.prototype
添加更多的内容将使它们显示在obj
的原型上:
Foo.prototype.charlie = 62;
alert(obj.charlie); // alerts 62
当然,如果替换Foo.prototype
(我不赞成),那么您将Foo.prototype
指向另一个对象。obj
仍将参考旧版本:
Foo.prototype = {delta: 77}; // Not recommended
alert(obj.delta); // alerts "undefined"
免费的实例
关于__proto__
:__proto__
是非标准的。在ECMAScript5(只有一年半的历史)之前,没有直接与对象原型交互的标准方法,只能在对象创建时分配,并且只能通过构造函数的prototype
属性间接分配。__proto__
是一些JavaScript引擎的专有扩展(最著名的是Mozilla的SpiderMonkey,Firefox中的引擎)。它没有出现在任何标准中,根据ECMAScript委员会的说法,它也不会出现。(相反,ECMAScript5提供了函数用于与对象原型交互。)__proto__
现在被Mozilla弃用。
_proto_
属性是对象的实例的属性(在本例中,对象是函数),它指的是实例的原型。您应该注意,此属性是非标准的且已折旧,请改用Object.getPrototypeOf(ref)
:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/Proto
相反,prototype
是函数声明的一个属性(而不是实例),是函数所有实例的原型。查看文档:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/prototype
当您创建一个函数的新实例(使用new
关键字)时,会创建一个由prototype
定义的函数对象。在它被实例化(var myNewObject = new Foo()
)之后,对Object.getPrototypeOf(myNewObject)
的调用将返回对实例所基于的原型的引用。
综上所述:__proto__
是什么东西是什么,prototype
是什么东西可以是(或可能已经是)。
- 附加到原型属性的Do函数没有闭包
- 日期原型属性
- JS构造函数的原型属性与其原型之间的区别
- 为什么函数对象的实例没有继承函数原型属性
- 为什么浏览器显示原型属性不同
- 为什么在Function.prototype上没有原型属性
- 函数的原型属性
- 原型继承和原型属性
- 在JavaScript中,函数的默认值是多少'的原型属性
- Chrome 不支持 Javascript 中的原型属性吗?
- 我应该在JavaScript中将什么连接到子原型属性
- 更新 JavaScript 中的原型属性
- 请解释有关 JavaScript 中的原型属性和函数构造函数的详细信息
- 为什么原型函数无法读取原型属性
- 与对象属性同名的原型属性
- 如何获取原型属性列表
- 构造函数中的方法与函数的原型属性之间的差异
- JavaScript 原型属性
- 函数对象__proto__和原型属性
- 未在自定义 OL3 控件的构造函数中定义的原型属性