实例对象创建属性有时就是这么任性

getter/setter方法的讲解:

Object.defineProperty(对象,对象下的属性,{属性中的特性设置(在此环境中默认特性基本为false});这是给对象中定义属性用的

现在定义一个函数申明

function Sj(){};不管定义何种函数,必然有Prototype属性指向其原型对象

Object.defineProperty(Sj.Prototype,'z',{get:function(){return 2;}});

现在我要实例化一个对象,var obj=new Sj();

强吻大家,这时候obj.z=??;想必大家都害羞的知道,无非是2呗,恭喜你,都不用抢答啦!!!

但是,问题来了,我要给obj.z赋个值,就10吧,obj.z=10;

轻吻亲们,现在的obj.z是多少,轻轻地告诉我!!!对,是2,其实还是2;

为什么呢,因为此时走的是原型get方法,有点奇葩吧,不能修改的,如果不是get方法,而是一个普通方法,现在就是10,这时是在实例上定义的属性;
告诉大家一句话,在原型上的属性如果定义了get方法,在实例中不好再定义这个属性,除非用Object.defineProperty在实例对象中重新定义就好;

如Object.defineProperty(obj,'z',{value=10,configurable:true,...});

这时候obj.z=10了;

 

posted @ 2015-03-18 11:07  带我任性,带我飞  阅读(163)  评论(0编辑  收藏  举报