function Person() {
this.name = ‘Lee‘;
this.age = 20;
this.sayName = function() {console.log(this.name)};
}
Person.prototype.height = 180;
var p = new Person();
判断属性
hasOwnProperty(property_name)
检测一个属性书否存在于实例中,如果是则返回true
。
p.hasOwnProperty("name"); // true
p.hasOwnProperty("height"); // false
in
能够通过对象访问给定属性时返回true
,无论该属性存在于实例中还是原型中。
"name" in p; // true
"height" in p; // true
获取属性
获取所有可枚举属性
for-in
返回所有能够通过对象访问的、可枚举的属性,其中既包括存在于实例中的属性,也包括存在于原型中的属性。
覆盖原型属性的自定义属性也将返回,不论是否标记为可枚举。
for(var i in p) {
console.log(i);
}
// name
// age
// sayName
// height
获取实例属性
Object.keys()
接收一个对象做参数,返回一个包含所有可枚举的实例属性的字符串数组。
Object.keys(p); // ["name", "age", "sayName"]
Object.getOwnPropertyNames()
接收一个对象为参数,获取对象所有实例属性的字符串数组 ,无论它是否可枚举。
Object.getOwnPropertyNames(p); // ["name", "age", "sayName"]
原型属性
JavaScript中没有单独判断和获取对象原型属性的方法,但是我们可以通过前面的方法组合实现。
判断原型属性
通过组合hasOwnProperty()
方法和in
操作符,就可以区分该属性是否存在于原型中。
function hasOwnPrototype(obj, name) {
return !obj.hasOwnProperty(name) && (name in obj);
}
hasOwnPrototype(p, "name"); // false
hasOwnPrototype(p, "height"); // true
获取原型属性
通过组合for-in
循环与hasOwnProperty()
方法输出对象的原型属性。
for(var i in p) {
!p.hasOwnProperty(i) && console.log(i);
}
// height
通过在原型对象上执行for-in
循环。
for(var i in Person.prototype) {
console.log(i);
}
// height
通过传递对象原型做参数给Object.keys()
方法。
Object.keys(Person.prototype); // ["height"]
总结
实例属性
判断实例属性使用对象的hasOwnProperty()
方法。或取对象实例属性使用Object.keys()
或Object.getOwnPropertyNames()
方法。
- hasOwnProperty(), 判断某个属性是否是对象的实例属性。
- Object.keys(),获取对象所有可枚举的实例属性。
- Object.getOwnPropertyNames(),获取所有的实例属性。
实例属性和原型属性
使用in
操作符判断某个属性是否存在于对象的实例或原型中。使用for-in
循环输出对象所有可枚举的实例属性与原型属性。
- in
- for-in
原型属性
通过组合hasOwnProperty()
方法和in
操作符,区分原型属性。通过传递对象原型给for-in
循环或Object.keys()
方法获取原型属性。
- hasOwnProperty() + in
- for(var i in Obj.prototype)
- Object.keys(Obj.prototype)
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2025-01-12 12:04:51