js原型和原型鏈的簡單理解


構造函數創建對象:

function Person()
{

}

var person = new Person();
person.name = 'Tian';
console.log(person.name);    //Tian

Person 就是一個構造函數,使用 new 創建了一個實例對象 person

prototype

  每個函數都有一個 prototype 屬性

  每一個 javaScript 對象(null除外)在創建的時候就會與之關聯另一個對象,這個對象就是我們所說的原型,每一個對象都會從原型“繼承”屬性。

function Person()
{

}

//protoType是函數才會有的屬性
Person.prototype.name = 'Tian';
var person1 = new Person();
var person2 = new Person();
console.log(person1.name);    //Tian
console.log(person2.name);    //Tian

 

 

 proto

  每一個 javaScript 對象(null除外)都具有的一個屬性叫 proto ,這個屬性會指向該對象的原型

function Person()
{

}

var person = new Person();
console.log(person.__proto__ === Person.prototype);    //true

 

 

 constructor

  每一個原型都有一個 constructor 屬性指向關聯的構造函數,實例原型指向構造函數

function Person()
{

}

console.log(Person === Person.prototype.constructor);  //true

 

 

function Person()
{

}

var person = new Person();
console.log(person.__proto__ === Person.prototype); //true
console.log(Person.prototype.constructor === Person); //true

cosnole.log(Object.getPrototypeOf(person) === Person.prototype); //true

實例與原型

function Person()
{

}

Person.prototype.name = 'Tian';

var person = new Person();

person.name = 'Anni';
console.log(person.name); //Anni

delete person.name;
console.log(person.name); //Tian

  在這個例子中,我們給實例對象 person 添加了 name 屬性,當我們打印 person.name 的時候,結果自然為 Anni。

  但是當我們刪除了 person 的 name 屬性時,讀取 person.name,從 person 對象中找不到 name 屬性就會從 person 的原型也就是 person.proto ,也就是 Person.prototype中查找,幸運的是我們找到了 name 屬性,結果為 Tian。

原型與原型

var obj = new Object();

obj.name = 'Tian';
console.log(obj.name);   //Tian

 

 原型鏈

  

 

 javaScript 默認並不會復制對象的屬性,相反,JavaScript只是在倆個對象之間創建一個關聯,這樣一個對象就可以通過委托訪問另一個對象的屬性和函數,所以與其叫繼承,委托的說法更准確些。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM