国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

詳解js創建對象的幾種方法及繼承

2024-05-06 15:40:45
字體:
來源:轉載
供稿:網友

創建對象

通過Object構造函數或對象字面量創建單個對象
這些方式有明顯的缺點:使用同一個接口創建很多對象,會產生大量的重復代碼。為了解決這個問題,出現了工廠模式。

工廠模式

考慮在ES中無法創建類(ES6前),開發人員發明了一種函數,用函數來封裝以特定接口創建對象的細節。(實現起來是在一個函數內創建好對象,然后把對象返回)。

function createPerson(name,age,job){  var o=new Object();  o.name=name;  o.age=age;  o.job=job;  o.sayName=function(){    alert(this.name);  };  return 0;}var person1=createPerson("Nicholas",29,"Software Engineer");var person2=createPerson("Greg",27,"Doctor");

構造函數模式

像Object和Array這樣的原生構造函數,在運行時會自動出現在執行環境。此外,也可以創建自定義的構造函數,從而定義自定義對象類型的屬性和方法。

function Person(name,age,job){  this.name=name;  this.age=age;  this.job=job;  this.sayName=function(){    alert(this.name);  };}var person1=new Person(...);var person2=new Person(...);

與工廠模式相比,具有以下特點:

    沒有顯式創建對象; 直接將屬性和方法賦給了this對象; 沒有return語句; 要創建新實例,必須使用new操作符;(否則屬性和方法將會被添加到window對象) 可以使用instanceof操作符檢測對象類型

構造函數的問題:

構造函數內部的方法會被重復創建,不同實例內的同名函數是不相等的。可通過將方法移到構造函數外部解決這一問題,但面臨新問題:封裝性不好。

原型模式

我們創建的每個函數都有一個prototype屬性,這個屬性是一個指針,指向一個對象,而這個對象的用途是包含可以由特定類型的所有實例共享的屬性和方法。(prototype就是通過調用構造函數而創建的那個對象實例的原型對象)。
使用原型對象的好處是可以讓所有對象實例共享它所包含的屬性和方法。換句話說,不必在構造函數中定義對象實例的信息,而是可以將這些信息直接添加到原型對象中。

function Person(){}Person.prototype.name="Nicholas";Person.prototype.age=29;Person.prototype.job="...";Person.prototype.sayName=function(){  ...};var person1=new Person();person1.sayName();//"Nicholas"

更常見的做法是用一個包含所有屬性和方法的對象字面量來重寫整個原型對象,并重設constructor屬性。

function Person(){}Person.prototype={  name:"...",  age:29,  job:"...",  sayName:function(){    ...  }};Object.defineProperty(Person.prototype,"constructor",{  enumerable:false,  value:Person,});

原型對象的問題:

他省略了為構造函數傳遞初始化參數這一環節,結果所有實例在默認情況下都將取得相同的屬性值,雖然這會在一定程度帶來一定的不便,但不是最大的問題,最大的問題是由其共享的本性所決定的。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 儋州市| 金秀| 济阳县| 嘉善县| 龙泉市| 朝阳区| 霍林郭勒市| 大方县| 丰台区| 玉门市| 安西县| 文山县| 西安市| 沿河| 个旧市| 萍乡市| 黄浦区| 德钦县| 防城港市| 麻城市| 浑源县| 县级市| 潮安县| 泾阳县| 开远市| 隆安县| 黄山市| 崇义县| 札达县| 陈巴尔虎旗| 溆浦县| 遂川县| 张家口市| 晴隆县| 闵行区| 江源县| 湛江市| 聂拉木县| 大庆市| 永登县| 永顺县|