`
deng131
  • 浏览: 672787 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

函数与原型对象关系

阅读更多
先记录下,慢慢理清,题目不叫什么好?

参考:

http://www.mollypages.org/misc/js.mp
http://blog.morrisjohns.com/illumination_on_javascript_prototypes.html
http://www.planabc.net/2010/05/06/interesting_code_associated_with_function_and_object/

分享到:
评论
7 楼 driftcloudy 2010-12-24  
图画的挺好,其实不需要搞这么清楚
6 楼 soni 2010-12-22  
挺简单的事,这图片给搞复杂了
5 楼 clue 2010-12-22  
deng131 写道
__proto__指向的是其构造函数的原型对象.

这么说不准确
1. 原型([[prototype]])与prototype属性是两个不同的东西,“原型对象”看起来像是在说内置的原型。
ECMA中为了避免误解,将原型这个内置属性标注为:[[prototype]],以和函数的prototype属性区分开。

2. 改变函数的prototype属性(整个替换:F.prototype={}),并不会影响已构造出的对象。
function F(){};
F.prototype.a=1;
var o = new F();
F.prototype = {a:2};
console.log(o.a); // 1


而F.prototype.a = xxx这样的语句并没有修改F的prototype属性,只是修改prototype属性引用的对象,它与构造出的对象的原型指向同一对象。
function F(){}
var o = new F();
F.prototype.a=1; // F.prototype的a属性被修改
console.log(o.__proto__ === F.prototype); // true
var bak = F.prototype;
F.prototype = {a:2}; // F的prototype属性被修改,已构造出来的o不受影响
console.log(o.__proto__ === bak ); // true
console.log(o.__proto__ === F.prototype); // false


P.S.
需注意一点的是,__proto__这样直接访问对象原型的用法,只能在部分浏览器中使用。
它是非标准的,更多的是用于调试罢了。
所以,实际开发的代码中不应使用它。
4 楼 deng131 2010-12-22  
__proto__指向的是其构造函数的原型对象.
3 楼 deng131 2010-12-22  
他们之间关系确实是有些很让人迷糊~
2 楼 LoriSun 2010-12-21  
这个关系是有一些纠结, 我暂且理解为: Function 继承于 Object.

Function.prototype.lori='lori2';
Object.prototype.lori='lori';
function A(){
}
var f = new Function();
var a = new A();
var o = new Object();
console.log(a.lori);
console.log(f.lori);
console.log(o.lori);
delete Function.prototype.lori;
console.log(f.lori);
console.log(o.lori);
1 楼 EldonReturn 2010-12-21  
这个图是用什么东西画的?挺好看的。我在分析源代码的时候一直想找这么个画图工具来着

相关推荐

    构造函数 原型对象 实例、图解

    JavaScript 构造函数、原型对象和实例之间的关系详解 在 JavaScript 中,构造函数、原型对象和实例之间存在着紧密的关系,这三个概念息息相关。下面我们将详细解释它们之间的关系。 构造函数 在 JavaScript 中,...

    构造函数、函数原型、函数实例三者之间的关系!

    构造函数、函数原型、函数实例三者之间的关系!详细的后续补上

    深入理解javascript构造函数和原型对象

    在深入理解JavaScript的过程中,构造函数和原型对象是两个核心概念。JavaScript是一种基于对象(Object-based)和原型(Prototype-based)的语言,其对象模型与传统的基于类(Class-based)语言有所不同。理解构造...

    JavaScript原型对象、构造函数和实例对象功能与用法详解

    本文实例讲述了JavaScript原型对象、构造函数和实例对象功能与用法。分享给大家供大家参考,具体如下: 大家都知道,javascript中其实并没有类的概念。但是,用构造函数跟原型对象却可以模拟类的实现。在这里,就先...

    JavaScript中构造函数与原型链之间的关系详解

    - 原型对象有一个`constructor`属性,它指向创建该原型的构造函数。例如,`demo.prototype.constructor`指向`Demo`构造函数。 - 原型对象的`__proto__`属性指向其自身的原型,即`Object.prototype`,这是所有...

    原生JS原型对象练习

    原型链是JavaScript中对象之间的引用关系,它使得一个对象可以访问其构造函数的原型对象的属性和方法。当我们尝试访问一个对象的属性时,如果该对象本身没有这个属性,JavaScript会向上查找该对象的原型,直到找到该...

    详解js中的原型,原型对象,原型链.docx

    1. **构造函数与原型对象:** - 每当创建一个新的函数时,会自动为其创建一个`prototype`属性,指向其原型对象。 - 例如,`Person`函数有一个指向`Person.prototype`的指针。 2. **构造函数与`constructor`属性:...

    js原型链详解

    ### JavaScript原型与原型链详解 JavaScript作为一门基于原型的...通过构造函数、实例对象以及原型对象之间的关系,可以构建起整个原型链,实现基于原型的继承。掌握这些概念对于深入学习JavaScript是非常有帮助的。

    举例说明JavaScript中的实例对象与原型对象_.docx

    总结一下,JavaScript中的实例对象与原型对象的关系是: 1. 实例对象通过`[[Prototype]]`链接到构造函数的`prototype`。 2. `constructor`属性指示对象的构造函数。 3. 修改`prototype`会改变新创建的实例的原型链,...

    小码哥原型对象使用的注意点共4页.pdf.zip

    在实际开发中,正确理解和使用原型对象能够帮助我们更好地实现代码复用,优化性能,以及实现更复杂的继承关系。了解这些注意点可以帮助开发者避免一些常见的陷阱,提高代码的质量和可维护性。通过学习小码哥的这份...

    js代码-构造函数+原型对象的继承

    在JavaScript中,构造函数和原型对象的继承是实现面向对象编程的重要机制。JavaScript是一种基于原型的语言,这意味着对象可以直接从其他对象继承属性和方法。这里我们将深入探讨这两种概念以及它们如何协同工作来...

    详解js中的原型,原型对象,原型链

    每个函数的原型对象都有一个`constructor`属性,它指向了创建该原型的函数。在上面的例子中,`Person.prototype.constructor`就是`Person`函数自身。 值得注意的是,每个通过构造函数创建的实例,如`person1`和`...

    js定义类 对象 构造函数,类的继承

    在JavaScript中,类(Class)、对象(Object)和构造函数(Constructor)是面向对象编程的基础。这篇文章将深入探讨这三个概念,以及如何实现类的继承。 首先,让我们理解什么是JavaScript中的对象。在JavaScript中...

    jQuery_的原型关系图

    在这个图中,我们可以看到对象之间的继承关系,以及jQuery如何扩展和利用JavaScript的原型链机制。 首先,让我们讨论JavaScript的原型(Prototype)概念。在JavaScript中,每个对象都有一个内置的`__proto__`属性,...

    举例说明JavaScript中的实例对象与原型对象

    在JavaScript中,构造函数、实例对象和原型对象之间的关系可通过原型链来理解。每个对象都有一个指向其原型对象的内部链接,当试图访问对象的属性时,如果在当前对象中找不到该属性,JavaScript会继续在该对象的原型...

Global site tag (gtag.js) - Google Analytics