# 15.判读方法属性是否在原型链上
# 一.hasOwnproperty
- 所有继承了
Object
(opens new window) 的对象都会继承到hasOwnProperty
方法。这个方法可以用来检测一个对象是否含有特定的自身属性;和in
(opens new window) 运算符不同,该方法会忽略掉那些从原型链上继承到的属性。
var test = function () {};
test.func = function () {
console.log(222);
};
test.prototype.wuwu = function () {
console.log(333);
};
console.log(test.hasOwnProperty("func")); //true
console.log(test.hasOwnProperty("wuwu")); //false
Array.hasOwnProperty("isArray"); // true
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
在看开源项目的过程中,经常会看到类似如下的源码。
for...in
循环对象的所有枚举属性,然后再使用hasOwnProperty()
方法来忽略继承属性。
# 二.Object.getOwnpropertyNames + indexOf
var test = function () {};
test.func = function () {
console.log(222);
};
test.prototype.wuwu = function () {
console.log(333);
};
console.log(Object.getOwnPropertyNames(test));
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
Object.getOwnPropertyNames
返回一个数组,包含自身可枚举和不可枚举的属性和方法
Object.getOwnPropertyNames(test).indexOf("func") //5
# 三.Object.keys + indexOf
var test = function () {};
test.func = function () {
console.log(222);
};
test.prototype.wuwu = function () {
console.log(333);
};
console.log(Object.keys(test));
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
Object.keys
返回自身可枚举的方法和属性