isPrototypeOf(实例对象) 判断原型的方法
//判断类(函数)的原型对象是不是类实例的原型 console.info(Person.prototype.isPrototypeOf(p1)); //true
ECMA5新特性 Object.getPrototypeOf():根据实例对象获得原型对象
//ECMA5: Object.getPrototypeOf(obj) 根据实例对象获取原型对象的方法 function Person(){ } Person.prototype.name = "z3"; Person.prototype.age = 20; Person.prototype.sayName = function(){ console.info("我是原型对象的方法!"); }; var p1 = new Person(); console.info(p1.name); //z3 var protoObj = Object.getPrototypeOf(p1); console.info(protoObj === Person.prototype); //true
每次读取一个对象的属性的时候,首先会进行一次搜索:
1、如果实例对象中有需要的属性,取实例对象中的属性值;
2、如果实例对象中没有,需要去原型对象中搜索,如果找到返回原型对象中的值;
3、如果原型对象中也没有,返回undefined
delete操作符 删除实例对象中的属性
var p2 = new Person(); console.info(p2.name); //z3 p2.name = "w5"; console.info(p2.name); //w5 delete p2.name; //使用delete删除实例对象中的属性 console.info(p2.name); //z3
object.hasOwnProperty(attribute) 判断属性是否属于对象本身
//判断一个对象属性是否是实例属性 var p3 = new Person(); p3.name = "z6"; console.info(p3.name); console.info(p3.hasOwnProperty("name")); //true console.info(p3.hasOwnProperty("age")); //false console.info(p3.hasOwnProperty("name1")); //false
in 操作符 判断对象中是否存在该属性(无论是实例对象还是原型对象)
//in for-in操作符 //in操作符 判断属性是否存在于实例对象和原型对象中,存在属性即可 var p1 = new Person(); console.info("name" in p1); //true var p2 = new Person(); p2.name = "w3"; console.info("name" in p1); //true //获取全部的属性,不区分实例对象和原型对象 for(var attr in p2){ console.info(attr); }
判断一个属性是否存在原型对象中:
//判断条件: // 1、不在实例对象中 !hasOwnProperty(propName) // 2、这个对象可以使用属性 propName in obj function hasPrototypeProperty(obj, propName){ return !obj.hasOwnProperty(propName) && propName in obj; } var p3 = new Person(); p3.name = "xiao A"; console.info(hasPrototypeProperty(p3, "name"));
ECMA5新特性 Object.keys();拿到当前对象里的所有keys 返回一个数组
ECMA5新特性 Object.getOwnPropertyNames 枚举对象所有的属性:不管该内部属性能否被枚举
//ECMA5新特性 Object.keys(obj) Object.getOwnPropertyNames(obj) //两个方法都是用来枚举实例对象的属性名称 //Object.keys(obj) 枚举出实例对象中可枚举的属性名称 //Object.getOwnPropertyNames(obj) 枚举出实例对象中所有的属性名称,例如constructor属性是不可枚举的 var p1 = new Person(); var arr1 = Object.keys(p1); // [] var arr2 = Object.getOwnPropertyNames(p1); // [] var arr3 = Object.keys(Object.getPrototypeOf(p1)); // ["name", "age", "sayName"] var arr4 = Object.getOwnPropertyNames(Object.getPrototypeOf(p1)); //["constructor", "name", "age", "sayName"] console.info(arr1); console.info(arr2); console.info(arr3); console.info(arr4);