首页 > 其他 > 详细

理解实例、原型搜索顺序

时间:2017-03-05 17:39:36      阅读:94      评论:0      收藏:0      [点我收藏+]

搜索顺序首先从对象实例本身实例开始。如果在实例中找到了具有给定名字的属性,则返回该属性的值。

如果没有找到,则继续搜索指针指向的原型对象,在原型对象中查找具有给定名字的属性,如果原型对象中中找到了这个属性,则返回该属性。

但是我们发现一个问题,就是实例中的指针仅指向原型,而不指向构造函数,这里的"仅指向原型对象",为什么搜索顺序又是从对象实例开始,然后搜索原型对象呢?

function Person(){ }

Person.prototype.name="xiu";

Person.prototype.sayName=function(){

            alert(this.name);

   };

var friend = new Person();//创建一个实例对象

friend.name="xie";           //为friend实例对象添加name属性

friend.sayName=function(){//为friend实例对象添加sayName方法

          alert(this.name);

        }

friend.sayName();// xie  会覆盖原型对象的name属性和sayName方法,搜索到的是对象实例中的方法

                         // 这就解释了为什么先从对象开始搜索

--------------------------------------------------------------------------------------------------------------------

function Person(){

            var name=22;

            function sayName(){

                     alert(this.name+10);

               }

          }    //构造函数中有name属性和sayName方法

Person.prototype.name=25;

Person.prototype.sayName=function(){

            alert(this.name);

   };

var friend = new Person();//创建一个实例对象

friend.sayName(); //25   搜索到的是原型对象的sayName方法,而不是指向构造函数中的sayName方法。

                          //这就解释了为什么说实例中的指针不指向构造函数,仅指向原型对象

--------------------------------------------------------------------------------------------------------------------

function Person(){}

Person.prototype.name="xiu";

Person.prototype.sayName=function(){

            alert(this.name);

   };

var friend = new Person();//创建一个实例对象

friend.sayName();//搜索的是原型对象的方法

理解实例、原型搜索顺序

原文:http://www.cnblogs.com/aixiuxiu/p/6506037.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!