instanceof:
判断一个实例对象 是否是某个函数的实例
语法: 对象名 instanceof 函数名
代码示例:
function Animal(){
this.name = "join";
}
Animal.prototype.sex = "男";
Animal.prototype.eat = function(){
console.log("我正在吃好吃的");
}
var animal = new Animal();
animal.age = 19;
animal.sex = "男";
function Son(){
Animal.call(this);
this.a = 10;
this.s ="s";
this.fn= ()=>{
console.log("我是一个孩子");
}
}
Son.prototype.score = "90";
Son.prototype.shopping = function(){
console.log("我是来逛街的");
}
Son.prototype = deepCopy(Animal.prototype);
Son.prototype.constructor = Son;
var a1 = new Animal();
var s1 = new Son();
console.log(a1);
console.log(s1);
console.log(s1 instanceof Son);
console.log(s1 instanceof Animal);
isPrototypeof():
只要是原型链中出现过的原型,都可以说是该原型链所产生的原型,返回true
语法: 原型名.isPrototypeOf(对象名)
简述: 会从s1开始沿着原型链逐层向上找,看看有没有一个叫Son.prototype的
console.log(Son.prototype.isPrototypeOf(s1));
hasOwnProperty():
用来检测当前对象中是否有该属性, 返回值为布尔类型
不会检查原型和原型链上的内容
只会去查找构造函数中的内容
语法: 对象名.hasOwnProperty(“属性/方法名”);
console.log(s1.hasOwnProperty("fn"));
delete: 删除属性
delete s1.name;
in:
检查该对象是否包含指定属性
这个属性可以是对象的直接属性
也可以是prototype继承而来的属性(
但是原型自身的属性/方法不行(原型链继承,重构原型,覆盖掉了)
语法: 属性/方法名 in 对象名
console.log("a" in s1);
console.log("name" in s1);
console.log("eat" in s1);
console.log("score" in s1);
console.log(s1.score);