javascript建立物件方式

2021-09-19 04:27:53 字數 3523 閱讀 5779

function createperson(name, age)

var person1 = new createperson('young',18);

console.log(person1.name + ':' + person1.age);

學習判斷物件型別:

function person(name,age)

var person1 = new person('young',18);

console.log(person1.name + ':' + person1.age);

在說優缺點之前,先來說說她本身的一點小故事吧

將建構函式當做函式使用

function person(name,age)

}//當做建構函式使用

var person1 = new person('young', 18);

person1.sayname();

console.log(person1.name + ':' + person1.age);

//當做普通函式呼叫

person('wind', 18);

console.log(window.sayname());

//在另乙個作用域中呼叫

var obj = new object();

person.call(obj, 'bird', 100);

console.log(obj.sayname());

建構函式優缺點
function person(name, age)

function sayname()

改為呼叫全域性函式,這樣一來毫無封裝性可言。。。接下來的原型模式可以彌補這個的不足

function person()

person.prototype.name = 'young';

person.prototype.age = 18;

person.prototype.sayname = function()

var person1 = new person();

console.log(person1.sayname());

var person2 = new person();

console.log(person1.sayname());

alert(person1.sayname === person2.sayname);

//person1和person2訪問的是同一組屬性的同乙個sayname()函式

雖然可以通過物件例項訪問儲存在原型中的值,但卻不能通過例項物件重寫原型中的值

function person()

person.prototype.name='young';

person.prototype.age=18;

person.prototype.sayname=function()

var person1=new person();

var person2=new person();

person1.name='wind';

console.log(person1.sayname());//wind

console.log(person2.sayname());//young

alert(person1.sayname==person2.sayname);//true

在我們呼叫person1.sayname的時候,會先後執行兩次搜尋,解析器先確定例項person1是否有sayname的屬性,有則呼叫自己的屬性,沒有則搜尋原型中的屬性。

function person()

person.prototype.name='young';

person.prototype.age=18;

person.prototype.sayname=function()

var person1=new person();

var person2=new person();

person1.name='wind';

console.log(person1.sayname());//wind

console.log(person2.sayname());//young

delete person1.name;

console.log(person1.sayname());//young

console.log(person2.sayname());//young

使用hasownpropertytype方法可以檢測乙個屬性是存在與原型中還是存在於例項中,該方法是從object繼承來的,例項中為true,原型中為false。

列舉物件上的例項屬性用object.keys()方法

function person()

person.prototype.name='young';

person.prototype.age=18;

person.prototype.sayname=function()

var keys=object.keys(person.prototype);

console.log(keys);//["name", "age", "sayname"]

原型模式優缺點

function person()

person.prototype=

};var p1=new person();

var p2=new person();

p1.friends.push('mon');

console.log(p1.friends);//["big", "pig", "mon"]

console.log(p2.friends);//["big", "pig", "mon"]

正是因為例項一般都要有自己的屬性,而我們這裡將他放在了person.prototype中,所以隨著p1的修改,整個例項包括原型都修改了。那麼,我們可以組合使用建構函式模式和原型模式。

function person(name,age)

person.prototype=

};var p1=new person('young',18);

var p2=new person('wind',78);

p1.friends.push('raganya');

console.log(p1.friends);//["big", "pig", "raganya"]

console.log(p2.friends);//["big", "pig"]

console.log(p1.friends==p2.friends);//false

console.log(p1.sayname==p2.sayname);//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 執...