码迷,mamicode.com
首页 > Web开发 > 详细

js中prototype,__proto__,constructor之间的关系

时间:2017-02-18 15:25:52      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:浏览器   指针   struct   object   const   就会   div   方法   pre   

  首先,我们需要了解三点:

  1. 只要创建一个任意新函数,就会根据一个prototype属性,该属性指向函数的原型对象;

  2. 每一个原型对象都会自动获得一个constructor属性,该属性只想prototype所在函数的指针;

  3. 当调用构造函数创建实例时,该实例内部将包含一个指向构造函数原型对象的指针,在大部分浏览器中用__proto__标识;

  从上面这三点我们可以了解到:

  正常情况下:prototype属性 -> 原型对象

        原型对象的constructor属性 -> 构造函数(即拥有prototype属性的函数)

        每一个创建的事例中都有一个__proto__(姑且这么认为)-> 构造函数的原型对象。

  以上只是正常情况下它们之间的关系。

 

  在原型上定义属性的方法可以分为两种:

1 // 第一种:直接在原型对象上添加属性
2     Animal.prototype.sayHi = function() {
3         console.log("Hi!");
4     }
 1     // 第二种:使用字面量创建一个新对象相当于new Object(),
 2     //        将新对象的引用赋值给Animal的prototype属性;
 3     //        该新对象是由Object()创建的实例,
 4     //        该实例的__proto__指向Object()的原型对象,也就是Object.prototype;
 5     // 因此:animal的__proto__最后指向新创建的对象
 6     //         constructor也指向Object构造函数
 7     Animal.prototype = {
 8         sayHi: function() {
 9             console.log("Hi!");
10         }
11     }
12     var animal = new Animal();

  从上面第二段代码中,我们可以看出,我们可以构造函数的prototype的指向。

  并且我们知道,我们了解实例中的__proto__属性是指向原型对象的,因此,我们将一个对象的实例作为另一个对象的原型对象,就会形成一个原型链,也就可以实现简单的简单继承了。

 

js中prototype,__proto__,constructor之间的关系

标签:浏览器   指针   struct   object   const   就会   div   方法   pre   

原文地址:http://www.cnblogs.com/diligentYe/p/6413132.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!