JS創(chuàng)建自定義對象的六種方法總結
1、創(chuàng)建一個 Object 實例
var person = new Object();
person.name = "rose";
person.age = 18;
person.job = "actor";
person.sayName = function () {
console.log(this.name);
};
console.log(person);
2、對象字面量
var person = {
name: "rose",
age: 18,
job: "actor",
sayName: function () {
console.log(this.name);
},
};
console.log(person);
上面兩種方式是創(chuàng)建對象的兩種基本方式,他們的原型就是 Object
3、工廠模式
function createPerson(name,age,actor){
var person = new Object();
person.name = "rose";
person.age = 18;
person.job = "actor";
person.sayName = function () {
console.log(this.name);
};
return person
}
console.log(p1 instanceof Object);//true
console.log(p1 instanceof createPerson);//false
從上面代碼中我們可以看出來,工廠模式實際上就是借助函數(shù),內(nèi)部返回使用第一種方式( new Object())創(chuàng)建的對象。
優(yōu)點:可以很方便的創(chuàng)建相似對象。
缺點:沒有解決對象識別的問題,即怎樣知道一個對象的類型。
4、構造函數(shù)方式
function Person(name, age, job) {
this.name = name;
this.age = age;
this.job = job;
this.sayName = function () {
console.log(this.name);
};
}
var p = new person("rose", 18, "actor");
console.log(p instanceof Person);//true
console.log(p instanceof Object);//true
構造函數(shù)可以創(chuàng)建特定類型的對象,像 Object , Array 這樣的原生構造函數(shù),在運行時會自動出現(xiàn)在執(zhí)行環(huán)境中。
構造函數(shù)模式與工廠模式的不同之處為:
- 沒有顯式得創(chuàng)建對象,
- 直接將屬性和方法賦值給了this對象
- 沒有return語句
構造函數(shù)方式創(chuàng)建對象必須使用 new ,操作符,會經(jīng)歷下面四個步驟
- 創(chuàng)建一個對象
- this指向這個新創(chuàng)建的對象
- 執(zhí)行代碼
- 返回這個對象
構造函數(shù)方式的優(yōu)點:以構造函數(shù)創(chuàng)建的對象,在其原型上都會有一個 constructor 屬性,這個屬性指向構造函數(shù) Person 而這個屬性最初是用來標識數(shù)據(jù)類型的。
憂化
function Person(name, age, job) {
this.name = name;
this.age = age;
this.job = job;
this.sayName = sayName;
}
function sayName(){
console.log(this.name);
}
var p = new person("rose", 18, "actor");
缺點:當對象需要很多方法的時候,就會定義多個全局作用域下的函數(shù),這樣一來,不僅毫無封裝性可言,而且讓全局作用域下的函數(shù)過多。
5、原型模式
function Person() {}
Person.prototype.name = "rose";
Person.prototype.age = 18;
Person.prototype.sayName = function () {
console.log(this.name);
};
var p = new Person();
console.log(p);
說到原型對象就要說一下原型鏈,原型與原型鏈對象如下圖所示:

我們可以看到,在prototype上面定義的所有屬性都是在其原型對象上。在原型對象上的屬性與方法屬于公有屬性和公有方法。其所有實例都可以訪問到。
6、**組合使用構造函數(shù)模式和原型模式 ** 最常用
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.sayName = function () {
console.log(this.name);
};
var p = new Person("rose", 18);
console.log(p);

對象在引用其屬性的時候,會按照原型鏈去查找,直到查找到Object的原型。
總結
到此這篇關于JS創(chuàng)建自定義對象的六種方法的文章就介紹到這了,更多相關JS創(chuàng)建自定義對象方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
JavaScript實現(xiàn)前端網(wǎng)頁版倒計時
這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)前端網(wǎng)頁版倒計時,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-03-03
百度地圖JavascriptApi Marker平滑移動及車頭指向行徑方向
本文主要介紹了百度地圖JavascriptApi Marker平滑移動及車頭指向行徑方向的相關知識。具有很好的參考價值。下面跟著小編一起來看下吧2017-03-03
JavaScript實現(xiàn)網(wǎng)頁圖片等比例縮放實現(xiàn)代碼及調(diào)用方式
為了保證圖片統(tǒng)一大小,直接設置圖片大小又會導致圖片拉伸,造成圖片模糊,接下來將介紹的代碼可以在圖片加載完成后自動按比例調(diào)整圖片大小,感興趣的你可以參考下2013-02-02
javascript判斷元素存在和判斷元素存在于實時的dom中的方法
本文主要介紹了javascript判斷元素存在和判斷元素存在于實時的dom中的方法。具有一定的參考價值,下面跟著小編一起來看下吧2017-01-01
解決js相同的正則多次調(diào)用test()返回的值卻不同的問題
今天小編就為大家分享一篇解決js相同的正則多次調(diào)用test()返回的值卻不同的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10
Javascript設計模式之觀察者模式的多個實現(xiàn)版本實例
這篇文章主要介紹了Javascript設計模式之觀察者模式的多個實現(xiàn)版本實例,本文給出3種實現(xiàn)版本代碼,同時給出了Jquery實現(xiàn)版本,需要的朋友可以參考下2015-03-03
echarts自定義餅圖數(shù)據(jù)刷新和顏色渲染問題淺析
這篇文章主要給大家介紹了關于echarts自定義餅圖數(shù)據(jù)刷新和顏色渲染問題的相關資料,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,需要的朋友可以參考下2023-05-05

