关于继承和原型(prototype)的javascript问题

标签 javascript

在 jQuery 库中,我找到了这一行

jQuery.extend = jQuery.fn.extend = function() {

这让我很困惑。我认为给定的对象会自动提供对其原型(prototype)方法的访问(换句话说,如果方法或 var 未在对象本身上解析,则会在其原型(prototype)上尝试,然后在原型(prototype)的原型(prototype)上尝试,依此类推)。

那么,将函数与对象和原型(prototype)相关联的原因是什么? (在 jQuery 中,fn 是原型(prototype)的别名)。

最佳答案

神奇的原型(prototype)是构造函数的属性,而不是对象。 jQuery 实例将从原型(prototype)继承 extend,但 jQuery 需要自己的副本。

上面说的很对,但可能会误导人。所有对象都有一个用于属性解析的内部 [[Prototype]] 属性,但它不一定可以在 Javascript 中直接访问(参见 ECMA-262 § 8.6.2 和 4.2.1)。您可以通过 obj.constructor.prototype 访问对象的原型(prototype),但它不使用 [[Prototype]] 属性,实际上是一个 little different 的东西.某些浏览器(例如 Firefox 和 Safari)支持可能是 [[Prototype]] 的非标准 __proto__ 属性。由于它不是标准属性,因此用途有限。

这是来自 § 4.2.1 的插图,可以提供一点帮助:

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

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

关于关于继承和原型(prototype)的javascript问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1740676/

相关文章:

javascript - 在 ReactJS 中重用映射循环中的属性 - 最佳实践

javascript - 如果在 resize 事件后调用 Google Maps API fitBounds() 行为会有所不同

javascript - Google 脚本发布 JSON 仅发送 null

javascript - Bookmarklet 不断跳转到新页面

javascript - 使用 jQuery 遍历并匹配元素

javascript - 控制容器可见性的 Bootstrap 导航栏元素

javascript - 在没有加载页面的情况下在 php 和 javascript 之间传递变量

javascript - 我对 JavaScript 游戏使用哪些比较运算符感到困惑。我尝试过使用选项 && 和 ||

javascript - PHP DOM 操作有什么用?

java - GWT 2.5.1 的 Google Guava 15.0 错误?