摘要:工廠模式不推薦應(yīng)該把方法放在函數(shù)的外面,避免重復(fù)創(chuàng)建該方法定義的不是構(gòu)建函數(shù),因該使用方法創(chuàng)建實(shí)例,而不是方法不要忘記在函數(shù)的最后構(gòu)造函數(shù)模式不推薦使用指代,函數(shù)無需明確應(yīng)該把方法放在函數(shù)的外面,避免重復(fù)創(chuàng)建該方法原型模式不推薦函數(shù)中不對屬
工廠模式(不推薦)
var sayName = function(){ return this.name; }; function createPerson(name,age){ var obj = {}; obj.name = name; obj.age = age; obj.sayName = sayName; return obj; } var newPerson = createPerson("Oliver",18); console.log(newPerson.sayName());
應(yīng)該把方法放在函數(shù)的外面,避免重復(fù)創(chuàng)建該方法;
定義的不是構(gòu)建函數(shù),因該使用var 方法創(chuàng)建實(shí)例,而不是new 方法;
不要忘記在函數(shù)的最后return obj;
構(gòu)造函數(shù)模式(不推薦)var sayName = function(){ return this.name; }; function Person(name,age){ this.name = name; this.age = age; this.sayName = sayName; } var newPerson = new Person("Oliver",18); console.log(newPerson.sayName());
使用this指代,函數(shù)無需明確return;
應(yīng)該把方法放在函數(shù)的外面,避免重復(fù)創(chuàng)建該方法;
原型模式(不推薦)var sayName = function(){ return this.name; }; function Person(){}; Person.prototype.name = "Oliver"; Person.prototype.age = 18; Person.prototype.sayName = sayName; var newPerson = new Person("Oliver",18); console.log(newPerson.sayName());
函數(shù)中不對屬性進(jìn)行定義而是用prototype;
組合使用構(gòu)造函數(shù)模式和原型模式(推薦)function Person(name,age){ this.name = name; this.age = age; }; Person.prototype.sayName = function(){ return this.name; }; var newPerson = new Person("Oliver",18); console.log(newPerson.sayName());
將所有屬性定義在函數(shù)中(構(gòu)造函數(shù)方式);將所有方法定義在prototype中(原型方式);
動態(tài)原型模式(推薦)function Person(name,age){ this.name = name; this.age = age; if (typeof Person.sayName != "function"){ Person.prototype.sayName = function(){ return this.name; }; } }; var newPerson = new Person("Oliver",18); console.log(newPerson.sayName());
這里判斷屬性是否為function 以避免重復(fù)創(chuàng)建;
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/78232.html
摘要:原型鏈繼承借用構(gòu)造函數(shù)偽造對象,經(jīng)典繼承無參數(shù)有參數(shù)組合繼承偽經(jīng)典繼承無參數(shù)有參數(shù)寄生組合式繼承引用類型最理想的范式或者可以把函數(shù)寫成下面這樣原型式繼承用于共享引用類型的值,與寄生式類似傳統(tǒng)版先定義函數(shù),再繼承版直接用,再繼承省略了定義函數(shù) 原型鏈繼承 function Person(){}; Person.prototype = { constructor: Person,...
摘要:二用操作符構(gòu)造對象屬性名屬性值屬性名屬性值屬性名屬性值屬性名屬性值方法名方法名首先用創(chuàng)建一個空對象,然后用多條語句給對象添加屬性方法。他的寫法與三用函數(shù)聲明的方式構(gòu)造對象比較像,但是稍有不同。 -- 新手向知識,就不用ES6寫法了。 一、字面量聲明 var obj = { 屬性名1 : 屬性值, 屬性名2 : 屬性值, 屬性名3 : 屬性...
摘要:構(gòu)造函數(shù)模式定義構(gòu)造函數(shù)模式是語言創(chuàng)建對象的通用方式。但兩種語言用構(gòu)造函數(shù)創(chuàng)建對象的方式略有不同在中沒有類的概念,函數(shù)即為一等公民,因此,不必顯式聲明某個類,直接創(chuàng)建構(gòu)造函數(shù)即可,類的方法和屬性在構(gòu)造函數(shù)中或原型對象上處理。 工廠模式 定義:工廠模式非常直觀,將創(chuàng)建對象的過程抽象為一個函數(shù),用函數(shù)封裝以特定接口創(chuàng)建對象的細(xì)節(jié)。通俗地講,工廠模式就是將創(chuàng)建對象的語句放在一個函數(shù)里,通...
摘要:前言雖然使用構(gòu)造函數(shù)或者使用對象字面量可以很方便的用來創(chuàng)建一個對象,但這種方式有一個明顯的缺點(diǎn)使用一個接口創(chuàng)建多個對象會產(chǎn)生很多冗余的代碼。即調(diào)用構(gòu)造函數(shù)所創(chuàng)建的那個對象的原型對象好處是可以讓所有對象的實(shí)例共享他的屬性的方法。 前言 雖然使用Object構(gòu)造函數(shù)或者使用對象字面量可以很方便的用來創(chuàng)建一個對象,但這種方式有一個明顯的缺點(diǎn):使用一個接口創(chuàng)建多個對象會產(chǎn)生很多冗余的代碼。因此...
摘要:跳槽時時刻刻都在發(fā)生,但是我建議大家跳槽之前,先想清楚為什么要跳槽。切不可跟風(fēng),看到同事一個個都走了,自己也盲目的開始面試起來期間也沒有準(zhǔn)備充分,到底是因?yàn)榧夹g(shù)原因影響自己的發(fā)展,偏移自己規(guī)劃的軌跡,還是錢給少了,不受重視。 跳槽時時刻刻都在發(fā)生,但是我建議大家跳槽之前,先想清楚為什么要跳槽。切不可跟風(fēng),看到同事一個個都走了,自己也盲目的開始面試起來(期間也沒有準(zhǔn)備充分),到底是因?yàn)榧?..
閱讀 1442·2023-04-25 19:00
閱讀 4135·2021-11-17 17:00
閱讀 1753·2021-11-11 16:55
閱讀 1511·2021-10-14 09:43
閱讀 3108·2021-09-30 09:58
閱讀 850·2021-09-02 15:11
閱讀 2118·2019-08-30 12:56
閱讀 1399·2019-08-30 11:12