首页 > 其他 > 详细

面向对象与原型(二)

时间:2016-01-13 12:54:11      阅读:170      评论:0      收藏:0      [点我收藏+]

     判断属性是在构造函数还是在原型里:

     1.hasOwnProperty(属性名)---->>>此方法判断属性是否在构造函数里。是,则返回true,否,则返回false

     2.in 操作符的判断范围在构造与原型中,只要在两个地方之一或都有该属性,则返回true

     3.没有直接的方法来判断属性是否在原型中。但从以上两个方法中,可以推导一个方法出来,用于判断属性是否在原型中,如下:

        function isInPrototype(object,property){

               return  !object.hasOwnProperty(property) && (property in object)

        }

      若该方法返回true,则表示该属性在原型中,而且只在。

 

      用字面量方式创建原型:

      function Box(){};
      Box.prototype={ 
             name:‘Lee‘,
             age:100,
             run:function(){
             returnthis.name+this.age+‘运行中...‘;
             }
      };

      字面量创建的方式使用constructor属性不会指向实例, 而会指向Object, 构造函数创建
的方式则相反。
如果想让字面量方式的constructor指向实例对象,那么可以这么做:     

      functionBox(){};

      Box.prototype={ 

            constructor:Box,

             name:‘Lee‘,

             age:100,

             run:function(){

             returnthis.name+this.age+‘运行中...‘;

             }
       };

      字面量方式为什么constructor会指向Object?因为Box.prototype={};这种写法其实就是创建了一个新对象。

而每创建一个函数,就会同时创建它prototype,这个对象也会自动获取constructor属性。 所以, 新对象的

constructor重写了Box原来的constructor, 因此会指向新对象,那个新对象没有指定构造函数,那么就默认为Object。

 

面向对象与原型(二)

原文:http://www.cnblogs.com/xbj-2016/p/5126671.html

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