一、原型的含義:JavaScript 中的“原型”既指 函數身上的 prototype 對象,也指 對象身上的 [[Prototype]] 隱藏鏈接;它倆共同構成了“原型鏈”,決定了“找不到屬性時去哪里繼續找”的規則。
(1)原型對象(prototype)
問題:構造函數中資源浪費的問題。下述例子為浪費內存的代碼例子:
//構造函數中的屬性和方法要加this,this指向實例對象
function Star(name,age) {this.name = namethis.age = agethis.sing = function(){.....}
}
const ldh = new Star('劉德華',55)//實例對象
const zxy = new Star('張學友',50)
//ldh.sing === zxy.sing 返回false,因為創建的實例對象在堆區開辟了兩個不同的內存空間
原型對象(prototype):解決了上述問題。

代碼演示
//this指向實例對象
function Star(name,age) {//公共屬性寫在構造函數中this.name = namethis.age = age
}
//將方法直接定義在prototype對象上,公共的方法寫在prototype中,Star.prototype.sing意思是在Star中追加sing方法
Star.prototype.sing = function() {...
}
//此時ldh.sing === zxy.sing 返回true,因為創建的實例對象在堆區開辟共同的空間
(2)constructor屬性:
含義:

(3)對象原型:__proto__:
含義:

(5)原型鏈※——查找規則
含義:

代碼演示:
function Person(){
....
}
const ldh = new Person()
console.log(ldh instanceof Person)//返回true,判斷Person.prototype是不是在ldh的原型鏈上
圖解:
