本篇文章給大家分享的是有關(guān)利用JavaScript創(chuàng)建一個自定義對象,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
成都創(chuàng)新互聯(lián)公司致力于互聯(lián)網(wǎng)網(wǎng)站建設(shè)與網(wǎng)站營銷,提供網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、網(wǎng)站開發(fā)、seo優(yōu)化、網(wǎng)站排名、互聯(lián)網(wǎng)營銷、小程序開發(fā)、公眾號商城、等建站開發(fā),成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)策劃專家,為不同類型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制解決方案,幫助客戶在新的全球化互聯(lián)網(wǎng)環(huán)境中保持優(yōu)勢。var person = new Object(); person.name = "rose"; person.age = 18; person.job = "actor"; person.sayName = function () { console.log(this.name); }; console.log(person);
var person = { name: "rose", age: 18, job: "actor", sayName: function () { console.log(this.name); }, }; console.log(person);
上面兩種方式是創(chuàng)建對象的兩種基本方式,他們的原型就是 Object
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)建相似對象。
缺點:沒有解決對象識別的問題,即怎樣知道一個對象的類型。
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
構(gòu)造函數(shù)可以創(chuàng)建特定類型的對象,像 Object , Array 這樣的原生構(gòu)造函數(shù),在運行時會自動出現(xiàn)在執(zhí)行環(huán)境中。
構(gòu)造函數(shù)模式與工廠模式的不同之處為:
沒有顯式得創(chuàng)建對象,
直接將屬性和方法賦值給了this對象
沒有return語句
構(gòu)造函數(shù)方式創(chuàng)建對象必須使用 new ,操作符,會經(jīng)歷下面四個步驟
創(chuàng)建一個對象
this指向這個新創(chuàng)建的對象
執(zhí)行代碼
返回這個對象
構(gòu)造函數(shù)方式的優(yōu)點:以構(gòu)造函數(shù)創(chuàng)建的對象,在其原型上都會有一個 constructor 屬性,這個屬性指向構(gòu)造函數(shù) Person 而這個屬性最初是用來標(biāo)識數(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");
缺點:當(dāng)對象需要很多方法的時候,就會定義多個全局作用域下的函數(shù),這樣一來,不僅毫無封裝性可言,而且讓全局作用域下的函數(shù)過多。
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上面定義的所有屬性都是在其原型對象上。在原型對象上的屬性與方法屬于公有屬性和公有方法。其所有實例都可以訪問到。
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的原型。
以上就是利用JavaScript創(chuàng)建一個自定義對象,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。