您好,登錄后才能下訂單哦!
這篇文章主要講解了總結JS創建對象的模式,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。
1.工廠模式
抽象了創建具體對象的過程,創建了一種函數,封裝特定的接口創建對象的細節。
return
剛新建的對象function createPerson(name, age, job) { var obj = new Object(); obj.name = name; obj.age = age; obj.job = job; obj.sayHi = function() { congsole.log(this.name); }; return obj; } var person1 = createPerson("name1", "age1", "job1"); var person2 = createPerson("name2", "age2", "job2");
存在問題:
沒有解決對象識別的問題(怎么識別對象的類型)
this
中return
new
操作符調用function Person(name, age, job) { this.name = name; this.age = age; this.job = job; this.sayHi = function() { console.log(this.name); }; } var person1 = new Person("name1", "age1", "job1"); var person2 = new Person("name2", "age2", "job2");
存在問題:
創建的每一個函數都有prototype
原型屬性,這個屬性是一個指針,指向一個對象,這個對象的用途是包含可以由特定類型的所有實例共享的屬性和方法。
所有原生引用類型都在其構造函數的原型上定義了方法
function Person{ } Person.prototype.name="name" Person.prototype.age="age" Person.prototype.job="job" Person.prototype.sayHi=function(){ console.log(this.name) } var person1=new Person() var person2=new Person()
存在問題:
構造函數用來定義實例屬性,原型模式用來定義方法和共享的屬性
function Person(name, age, job) { this.name = name; this.age = age; this.job = job; } Person.prototype={ constructor:Person; sayHi:function(){ console.log(this.name) } } var person1 = new Person("name1", "age1", "job1");
這里對原型的修改,能夠對所有實例生效,只在初次調用構造函數會執行
function Person(name,age,job){ this.name=name; this.age=age; this.job=job; if(typeof this.sayHi !="function" ){ Person.prototype.sayHi=functong(){ console.log(this.name) } } } var person1 = new Person("name1", "age1", "job1");
工廠模式+構造函數
instanceof
來去定對象原型function Person(name, age, job) { var obj = new Object(); obj.name = name; obj.age = age; obj.job = job; obj.sayHi = function() { congsole.log(this.name); }; return obj; } var person1 = new Person("name1", "age1", "job1");
this
new
function Person(name, age, job) { var obj = new Object(); // 定義室友變量和函數 obj.sayHi = function() { congsole.log(name); }; return obj; } var person1 = Person("name1", "age1", "job1"); // name1
看完上述內容,是不是對總結JS創建對象的模式有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。