叙述:在java和JavaScript中,new都是生成一个实例,而二者的机制不相同,JavaScript中,new关键字会引起(var newObject = new parent())如下几个过程:前端
生成一个新对象{}--->{}.__proto__ = {}_parent.prototype(赋值)--->调用parent(),并将this绑定到{}对象上--->若是parent()没有返回对象,则返回{}java
new关键字的缺陷:没法共享属性和方法,共享是什么意思呢?看一个例子bash
//父类
function parent(name){
this.name = name;
}
parent.prototype = {
kinds: "狗"
}
//子类继承
let child1 = new parent("tom");
//打印属性
console.log(child1.name); //"tom"
console.log(child1.kinds);//"狗"
//修改父类
parent.name = "tony";
parent.prototype.kinds = "猫";
//再次打印属性
console.log(child1.name);//"tom"
console.log(child1.kinds);//"猫"
复制代码
$anyName表明任何命名;函数
下图为参照:ui
Object.create():会直接继承Object对象this
利用原型链查找 流程: obj instanceof obj2:spa
//大体流程,可是instanceof源码可能不是这样的
function instanceof(obj,obj2){
let findDis = obj.__proto__;
let findResult = false;
do{
if(findDis===obj2.prototype){
findResult = true;
break;
}
findDis = findDis.__proto__;
}while(findDis===null)
return findResult;
}
复制代码
from 前端小白prototype