关于继承和原型的javascript问题

Ste*_*ini 3 javascript

在jQuery库中,我发现了这一行

jQuery.extend = jQuery.fn.extend = function() {
Run Code Online (Sandbox Code Playgroud)

这种困惑让我感到困惑.我认为一个给定的对象自动提供对其原型方法的访问(换句话说,如果一个方法或var没有在对象本身上解析,则在其原型上尝试,然后在原型的原型上等等).

那么,将功能与对象和原型相关联的原因是什么?(在jQuery fn中是原型的别名).

out*_*tis 6

魔法prototype是构造者的属性,而不是对象.jQuery的一个实例extend将从原型继承,但jQuery需要自己的副本.

以上是完全正确的,但可能会产生误导.所有对象都有一个用于属性解析的内部[[Prototype]]属性,但它不一定可以在Javascript中直接访问(参见ECMA- 262§8.6.2和4.2.1).您可以通过obj.constructor.prototype但不使用[[Prototype]]属性来访问对象的原型,事实上,它有点不同.某些浏览器(例如Firefox和Safari)支持__proto__可能[[Prototype]] 的非标准属性.由于它不是标准属性,因此它的用处有限.

以下是§4.2.1的示例,以帮助一点:

alt text http://img121.imageshack.us/img121/3504/prototypes.png

CF是一个构造函数; 每个cf i都是从CF创建的.从CFCf p看到的实线箭头表示您可以在Javascript中访问的原型属性.虚线箭头表示每个对象对其原型的引用以及Javascript引擎使用的引用,但不会向脚本公开.请注意,CF有自己的隐式原型链接Function.