# 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

在看开源项目的过程中,经常会看到类似如下的源码。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

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

Object.keys返回自身可枚举的方法和属性

Last Updated: 6/3/2024, 1:08:34 AM