1.首先 先搞清楚原型
person是乙個建構函式,我們new了乙個例項person
function person()
var person = new person();
person.name = '大柱';
console.log(person.name) // 大柱
prototype(每個函式都有乙個 prototype 屬性)
//物件person1,person2 name屬性並未賦值,都從原型(person.prototype)"繼承"屬性
person.prototype.name = '大柱';
var person1 = new person();
var person2 = new person();
console.log(person1.name) // 大柱
console.log(person2.name) // 大柱
proto(每乙個物件(除了 null )都具有的乙個proto屬性,指向該物件的原型)
var person = new person();
console.log(person.__proto__ === person.prototype); // true
所以我們可以理解為 通過person建構函式例項化的物件的原型指向就是該建構函式的原型
constructor(每個原型都有乙個 constructor 屬性指向關聯的建構函式)
console.log(person === person.prototype.constructor); // true
例項與原型的關係
person.prototype.name = '大柱';
var person = new person();
person.name = '建國';
console.log(person.name) // 建國
delete person.name;
console.log(person.name) // 大柱
給例項 person 新增 name 屬性,列印 person.name 的時候,結果自然為 建國。
刪除了 person 的 name 屬性時,讀取 person.name,從 person 物件中找不到 name 屬性就會從 person 的原型(person.proto/person.prototype) 中查詢,結果便是我們一開始給person原型的name屬性賦值的「大柱」。
原型與原型
原型的原型指向(proto)object.prototype
2.什麼是原型鏈
console.log(object.prototype.__proto__ === null) // true
我們把這個有proto串起來的直到object.prototype.proto為null的鏈叫做原型鏈。原型鏈的形成是真正是靠proto 而非prototype JS原型和原型鏈
建立建構函式 function word words word.prototype 建立例項 var w new word hello world w.print function w.print hello world w.alert hello world function.prototype....
js原型鏈和原型
1 原型 在js中一切皆物件,那原型也是乙個物件,通過原型可以實現物件的屬性繼承,js的物件中包含著乙個 prototype 內部屬性,這個屬性所對應的就是物件的原型。prototype 作為物件的內部屬性不能被直接訪問,所以為了方便檢視乙個物件的原型,提供了 proto 這個非標準的訪問器,在js...
JS 原型和原型鏈
先宣告乙個建構函式 function people name,age 把類的方法寫在建構函式原型物件中,子類就不能再通過呼叫父類建構函式來繼承方法 屬性還是可以繼承 給people的原型新增方法 people.prototype.speak function 建立子類繼承people functio...