1.hasOwnProperty 判断是否存在属性,不检查原型链的,可以配合in来判断原型链是否有key
class Animal {
constructor(name) {
this.name = name;
}
}
Animal.prototype.originName = "原型属性测试";
let a = new Animal("dog");
console.log(a.name);
a.age = 13;
console.log(a.hasOwnProperty("name")); // true
console.log(a.hasOwnProperty("age")); // true
console.log(a.hasOwnProperty("originName")); // false
console.log(Animal.prototype.hasOwnProperty("originName")); // true
2.isPrototypeOf 检测一个对象是否是另一个对象的原型。或者说一个对象是否被包含在另一个对象的原型链中
class Animal {
constructor(name) {
this.name = name;
}
}
let a = new Animal("dog");
console.log(Animal.prototype.isPrototypeOf(a)); // true
3. Object.create 就是将其挂载到__proto__上,constructor对应构造函数,__proto__对应原型
let o = Object.create({ name: "dog" });
console.log(o.__proto__.name === "dog");
console.log(o.__proto__.__proto__ === Object.prototype);
function Animal() {}
let f = Object.create(Animal.prototype);
console.log(f);
console.log(f.__proto__ === Animal.prototype);
console.log(f.constructor === Animal);
console.log(f.__proto__.__proto__ === Object.prototype);
function animal() {}
let f2 = Object.create(animal);
console.log(f2);
console.log(f2.__proto__ === animal);
console.log(f2.__proto__.prototype.constructor === animal);
console.log(f2.__proto__.prototype.__proto__ === Object.prototype);
class B {}
let b = Object.create(B.prototype);
console.log(b);
console.log(b.__proto__ === B.prototype);
console.log(b.constructor === B);
console.log(b.__proto__.__proto__ === Object.prototype);
以上结果全是true