JavaScript检测实例属性, 原型属性_javascript技巧
程序员文章站
2022-04-03 15:25:41
...
0.前提
functino Person() {}
Person.prototype.name = 'apple';
var person1 = new Person();
var person2 = new Person();
person1.name = 'banana';
console.log(person1.hasOwnPrototype(name)); //true
console.log(person2.hasOwnPrototype(name)); //false
console.log('name' in person1); //true
console.log('name' in person2); //true
function hasPrototypeProperty(object, name) {
return !object.hasOwnPrototype(name) && (name in object);
}
console.log(hasPrototypeProperty(person1, 'name')); //false
console.log(hasPrototypeProperty(person2, 'name')); //true
JavaScript对象的属性分为两种存在形态. 一种是存在实例中, 另一是存在原型对象中.
根据上述, 检测属性的时候会出现4种情况
既不存在实例中, 也不存在原型对象中
存在实例中, 不存在原型对象中
不存在实例中, 存在原型对象中
既存在实例中, 也存在原型对象中
1.hasOwnPrototype()
hasOwnPrototype()接受一个字符串格式的属性名称, 如果实例本身存在该属性(情况2/情况4), 返回true. 否则, 返回false(情况1/情况3).
复制代码 代码如下:
functino Person() {}
Person.prototype.name = 'apple';
var person1 = new Person();
var person2 = new Person();
person1.name = 'banana';
console.log(person1.hasOwnPrototype(name)); //true
console.log(person2.hasOwnPrototype(name)); //false
2.in操作符
in操作符无论属性是存在实例本身中, 还是原型对象中, 就会返回true(情况2/情况3/情况4); 否则, 返回false(情况1).
复制代码 代码如下:
console.log('name' in person1); //true
console.log('name' in person2); //true
3.检测存在原型的属性
结合in操作符和hasOwnProperty()就可以自定义函数来检测原型中是否存在给定的属性.
复制代码 代码如下:
function hasPrototypeProperty(object, name) {
return !object.hasOwnPrototype(name) && (name in object);
}
console.log(hasPrototypeProperty(person1, 'name')); //false
console.log(hasPrototypeProperty(person2, 'name')); //true
原型中存在给定属性, 返回true(情况3). 否则返回false(情况1/情况2/情况4).
以上就是本文的全部内容了,希望大家能够喜欢
推荐阅读
-
IE6/7中getAttribute获取href/src 属性(相对路径0值与其它浏览器不同_javascript技巧
-
网页运行时提示对象不支持abigimage属性或方法_javascript技巧
-
遍历DOM对象内的元素属性示例代码_javascript技巧
-
document.createElement("A")比较不错的属性_javascript技巧
-
让低版本浏览器支持input的placeholder属性(js方法)_javascript技巧
-
让低版本浏览器支持input的placeholder属性(js方法)_javascript技巧
-
JavaScript中的原型prototype属性使用详解
-
JavaScript的检测属性介绍
-
javascript如何检测对象中是否存在某个属性?
-
javascript遍历json对象的key和任意js对象属性实例