JavaScript 检查来自实例还是原型

方法

1fn1 instanceof Fun // fn1 是由构造函数 Fun 构造出来的吗?返回 Boolean
2Object.getPrototypeOf(Person) // 返回 Person 构造函数的原型
3Object.getPrototypeOf(Person) == Person.prototype // true

检查来自实例还是原型

1Person.hasOwnProperty('fun') // 是来自实例返回 true,不是返回 false
2console.log('name' in a) // 实例或原型上有都返回 true
3
4// 利用hasOwnProperty 与 in 判断到底来自实例还是原型
5function hasO(object, name) {
6  return object.hasOwnProperty(name) && name in object
7  // 判断是不是来自实例,如果不是,再in判断是不是原型
8}

返回实例或原型

将实例保存为数组

1function Person() {
2  this.age = 'age'
3}
4Person.prototype.name = 'nn'
5Person.prototype.sayName = function () {}
6
7const p = new Person()
8Object.keys(Person.prototype) // ["name", "sayName"] 原型中的所有实例
9Object.keys(p) // ["age"] 只返回p 的实例
10Object.getOwnPropertyNames(Person.prototype) // ["constructor", "name", "job", "sayName"] 包含constructor