18--26 面向对象程序设计20(属性是否在对象(和原型对象)中)

来源:互联网 发布:windows http 编辑:程序博客网 时间:2024/05/02 06:14

转载请注明出处:http://blog.csdn.net/u011569040/article/details/50779068

ECMA5: Object.getPrototypeOf():根据实例对象获得原型对象

// isPrototypeOf(new instance); 判断原型的方法// ECMA5: Object.getPrototypeOf():根据实例对象获得原型对象function Person(){}Person.prototype.name = 'z3'; Person.prototype.age  = 20 ; Person.prototype.sayName  = function(){alert('我是原型对象的方法!')}; var p1 = new Person();alert(p1.name); // z3 var prototypeObj = Object.getPrototypeOf(p1);alert(prototypeObj == Person.prototype);/* 每次代码读取一个对象的属性的时候: 首先会进行一次搜索:搜索实例对象里name的属性,看看有没有 * 如果没有,再去p2的实例所对应的原型对象里去搜索name属性 如果有就返回 没有返回undefined */var p2 = new Person();p2.name = 'w5';// 实例对象的namedelete p2.name ; alert(p2.name);// 就想获得原型对象的name属性

hasOwnProperty

// 判断一个对象属性 是属于原型属性 还是属于实例属性//用hasOwnPropertyvar p3 = new Person();p3.name = 'z6';//如果没有这一行,则用hasOwnProperty判断是false,因为name是原型的属性不是实例的alert(p3.hasOwnProperty('name'));

in操作符

//in 操作符  : for-in // in 操作符 判断属性是否存在于 实例对象和原型对象中var p1 = new Person();alert('name' in p1); // truevar p2 = new Person();p2.name = 'w3';alert('name' in p2); // true

hasOwnProperty和in合起来用,判断一个属性 是否存在原型中

// 就是判断一个属性 是否存在原型中// 在原型对象中 是否存在这个属性 第一个参数:当前对象 ,第二个参数:要判断的属性function hasPrototypeProperty(object , name){return !object.hasOwnProperty(name) && name in object ;}var p3 = new Person();p3.name = 'xiao A';alert(hasPrototypeProperty(p3,'name'));

Object.keys(),得到当前对象的所有属性

// ECMA5新特性 Object.keys();// 拿到当前对象里的所有keys 返回一个数组var p1 = new Person();p1.name = 'z3';p1.age = 20 ; var attributes = Object.keys(p1);//alert(attributes);var attributes2 = Object.keys(Person.prototype);//alert(attributes2);

上述方法对constructor这样的不能被枚举的属性是不能列出,但

Object.getOwnPropertyNames 枚举对象所有的属性 :不管该内部属性能否被枚举

// ECMA5 constructor属性: 该属性是不能被枚举的[eable = false]// Object.getOwnPropertyNames 枚举对象所有的属性 :不管该内部属性能否被枚举var attributes3 = Object.getOwnPropertyNames(Person.prototype);alert(attributes3);




0 0
原创粉丝点击