//Object.getPrototypeOf(person1);//取的person1对象的原型
// Person.prototype.isPrototypeOf(person1);//判断person1的__proto__是否指向Person.prototype(即person1的原型)
person1.hasOwnProperty("name")//hasOwnProperty()检测一个属性是存在于原型中还是存在于实例中,给定属性存在于对象实例中时才会返回true
delete person1.name;//可以删除实例属性,此时person1的name属性只能从原型中搜到
"name" in person1//如论从原型中获的,还是实例属性中获的,只要存在name属性,都会返回true,因此可以使用in和hasOwnProperty()来判断属性存在于原型中还是实例中
function hasOwnProperty(obj,name){
return !obj.hasOwnProperty(name) && (name in obj);//只要(name in obj)返回true,函数返回true时,属性存在于原型中;函数返回false,属性存在于实例中
}
// 在使用for-in循环时,返回的是所有能够通过对象访问的、可枚举的属性,其中既包括存在于实例中的属性,也包括存在于原型中的属性。
//屏蔽了原型中不可枚举属性(即将[[ Enumerable ]]标记为false的属性)的实例属性也会在for-in循环中返回,因为根据规定,所有开发人员定义的属性都是可枚举的--只有在IE8以及更早版本中例外
var o = {
toString: function () {
return "My Object";
}
}
for(var pro in o){
if(pro == "toString"){
alert("Found toString");//在IE中不会显示
}
}
//要取的对象上所有可枚举的实例属性,可以使用es5中的Object.keys()方法。接收一个对象作为参数,返回一个包含所有可枚举属性的字符串数组。
function Person(){
}
Person.prototype.age = 20;
Person.prototype.name = "DZZ";
Person.prototype.sayName = function () {
alert(this.name);
};
var keys = Object.keys(Person.prototype);//参数为原型对象
alert(keys);//age,name,sayName
var p1 = new Person();
p1.name = "YBB";
p1.age = 24;
var p1keys = Object.keys(p1);//参数为实例对象
alert(p1keys);//name,age
//Object.getOwnPropertyNames()//得到所有的实例属性,无论它是否枚举
var keys = Object.getOwnPropertyNames(Person.prototype);
alert(keys);//constructor,age,name,sayName
原型与操作符
最新推荐文章于 2023-01-09 20:34:10 发布