JavaScript建立物件過程及 proto

2021-08-07 12:32:58 字數 2414 閱讀 1417

js只有函式物件具備類的概念,要建立物件,必須使用函式物件,函式物件內部的[[constructor]]用於構造物件,[[call]]用於呼叫物件。

1.var obj = new object()使用內建的object函式例項化物件。

2.var obj = {}或者var obj =使用js引擎觸發object和array的構造過程。

3.function fn() {};var obj = new fn{}使用使用者自定義型別例項化物件。

new建立的物件和函式的prototype物件之間存在繼承關係

function

a();

a.prototype.b = 'b in a prototype';

var i = new a();

i.b;//'b in a prototype';

i instanceof a;//true;

a.prototype = {};

i.b;//'b in a prototype';

i instanceof a;//false;

i.__proto__;

//

從上面**看出,將aprototype置為{}空物件後,i instanceof a;返回false,可見繼承關係是通過prototype實現的。

由於new建立物件時將建構函式的prototype屬性賦值給例項的__proto__屬性,因此__proto__屬性和prototype指向同一引用,如果將prototype同物件字面量方式賦值為其他物件的話,則切斷了__proto__prototype之間的聯絡,因為prototype和其最初的引用之間沒有關係了,這裡考慮引用型別的儲存即可明白,__proto__依舊指向之前prototype的引用,所以__proto__屬性上存在的屬性不會消失。

aprototype置為{}空物件後對a的例項i來說,i的隱式__proto__屬性並未改變,即i被例項化後__proto__不受prototype的影響,相當於例項化後,通過父類prototype繼承來的屬性和方法都會儲存在自身的__proto__屬性上,與父類沒有關係,因此也不能通過例項更改父類原型上的方法。如下:

i.b = 123

//123

i.__proto__.b

//"b in a prototype"

objectfunctionnumberstring,等的構造器constructor都是function,例項物件的構造器會從原型鏈上繼承自父類。

number.constructor === function;

//true

number.__proto__ === function.prototype;

//true

function是最頂層的構造器,他具有自舉性,

typeof

function.prototype;//"function"

function.constructor === function;//true

function.__proto__ === function.prototype;//true

所有函式的__proto__屬性都指向function.prototype,function__proto__也指向function.prototype,

function

a(){}

a.__proto__ === function.prototype

//true

function.__proto__ === function.prototype;//true

JavaScript建立物件

一 建立單個物件 方式一 object建構函式 var o new object o.key value 方式二 物件字面量 方式一和二缺點 使用相同的介面建立很多物件會產生大量重複 使用方式三解決 方式三 工廠模式 使用函式封裝以特定介面建立物件的細節 function createobject ...

JavaScript 建立物件

工廠模式抽象了建立具體物件的過程,能夠快速建立大量具有相似屬性及方法的物件。function createperson name,age,job obj.name name obj.age age obj.job job obj.sayname function return obj var per...

JavaScript 建立物件

function person var person new person 複製 使用關鍵字new建立新例項物件經過了以下幾步 1 建立乙個新物件,如 var person 2 新物件的 proto 屬性指向建構函式的原型物件。3 將建構函式的作用域賦值給新物件。也所以this物件指向新物件 4 執...