敘述:在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