一.hasOwnproperty
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
在看开源项目的过程中,经常会看到类似如下的源码。
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));
Object.getOwnPropertyNames
返回一个数组,包含自身可枚举和不可枚举的属性和方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lJ2wkpeD-1616915157172)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210328150010587.png)]
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) );
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zeUhC4vr-1616915157176)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210328150211653.png)]
Object.keys
返回自身可枚举的方法和属性