本文主要介紹了js物件建立的幾種方式
var person = new object();
person.name = 'nike';
person.age = 29;
var person = {};//相當於var person = new object();
var person =
物件字面量是物件定義的一種簡寫形式,目的在於簡化建立包含大量屬性的物件的過程。也就是說,第一種和第二種方式建立物件的方法其實都是一樣的,只是寫法上的區別不同
function createperson(name,age,job);
return o;
}var person1 = createperson('nike',29,'teacher');
var person2 = createperson('arvin',20,'student');
function person(name,age,job);
}var person1 = new person('nike',29,'teacher');
var person2 = new person('arvin',20,'student');
對比工廠模式,我們可以發現以下區別:
1.沒有顯示地建立物件
2.直接將屬性和方法賦給了this物件
3.沒有return語句
4.終於可以識別的物件的型別。對於檢測物件型別,我們應該使用instanceof操作符,我們來進行自主檢測:
alert(person1 instanceof object); //ture同時我們也應該明白,按照慣例,建構函式始終要應該以乙個大寫字母開頭,而非建構函式則應該以乙個小寫字母開頭。alert(person1 instanceof person); //ture
alert(person2 instanceof object); //ture
alert(person2 instanceof object); //ture
那麼建構函式確實挺好用的,但是它也有它的缺點:
function person(){}
person.prototype.name = 'nike';
person.prototype.age = 20;
person.prototype.jbo = 'teacher';
person.prototype.sayname = function();
var person1 = new person();
person1.sayname();
使用原型建立物件的方式,可以讓所有物件例項共享它所包含的屬性和方法。
如果是使用原型建立物件模式,請看下面**:
function person(){}
person.prototype.name = 'nike';
person.prototype.age = 20;
person.prototype.jbo = 'teacher';
person.prototype.sayname = function();
var person1 = new person();
var person2 = new person();
person1.name ='greg';
alert(person1.name); //'greg' --來自例項
alert(person2.name); //'nike' --來自原型
當為物件例項新增乙個屬性時,這個屬性就會遮蔽原型物件中儲存的同名屬性。
function person(name,age,job)
person.prototype = ;
}var person1 = new person('nike',20,'teacher');
對JS關於物件建立的幾種方式的整理
最近一直在看js高階程式設計這本書,有空來梳理一下幾種建立物件的方式。話不多說,直接步入正題。第一種 object建構函式建立 var person new object person.name nike person.age 29 這行 建立了object引用型別的乙個新例項,然後把例項儲存在變數...
js 建立物件的幾種方式
一 原始方式 解釋 原始方法建立物件,通過new關鍵字生成乙個物件,然後根據js是動態語言的特性新增屬性和方法,構造乙個物件。其中this是表示呼叫該方法的物件。缺點 多次建立物件,則需要重複 多次,不利於 的復用。二 工廠模式 var getage function var getname fun...
js 建立物件的幾種方式
第一種 工廠模式 例1 function createobj name,age return o var per1 createobj 張三 20 per1.sayinfo 缺點 無法知道物件的型別 第二種 建構函式模式 例2 function person name,age var per2 ne...