當(dāng)前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
JavaScript对象的创建之构造函数
生活随笔
收集整理的這篇文章主要介紹了
JavaScript对象的创建之构造函数
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
通過構(gòu)造函數(shù)的方式創(chuàng)建和基于工廠的創(chuàng)建類似,最大的區(qū)別就是函數(shù)的名稱就是類的名稱,按照java的約定,第一個(gè)字母大寫。
使用構(gòu)造函數(shù)創(chuàng)建對象時(shí),在函數(shù)內(nèi)部是通過this關(guān)鍵字來完成屬性的定義。
function Person(name, age){this.name = name;this.age = age;//帶來的問題是所有的對象都會為該行為分配空間this.say = function(){ //注意:say也是Person的一個(gè)屬性alert(this.name + "-->" + this.age);} }//通過new Person來創(chuàng)建對象 var p1 = new Person("Leon",22); var p2 = new Person("Ada",32); p1.say(); p2.say(); alert(typeof p1); //object//使用構(gòu)造函數(shù)的方式可以通過以下方式來檢測對象的類型 alert(p1 instanceof Person); //true alert(p1.say == p2.say); //false 由于方法是定義在類中的,所有這兩個(gè)say不是一樣的?
使用構(gòu)造函數(shù)創(chuàng)建所帶來的第一個(gè)問題就是每一個(gè)對象都會存在一個(gè)方法的拷貝,如果對象的方法很多的話,空間的占有率就會大大增加。
?
如何改進(jìn)?可以將函數(shù)放在全局變量中定義,這樣可以讓類中的行為/方法指向同一個(gè)函數(shù)。
function Person(name, age){this.name = name;this.age = age;this.say = say; }function say(){alert(this.name + "-->" + this.age); }var p1 = new Person("Leon",22); var p2 = new Person("Ada",32); p1.say(); p2.say();alert(p1 instanceof Person); //true alert(p1.say == p2.say); //true將行為設(shè)置為全局的行為,如果將所有的方法都設(shè)計(jì)成全局函數(shù)的話,這個(gè)函數(shù)就可以被window調(diào)用,此時(shí)就破壞了對象的封裝性,
而且如果某個(gè)對象有大量的方法,就會導(dǎo)致整個(gè)代碼中充斥著大量的全局函數(shù),這樣將不利于開發(fā)。
?
轉(zhuǎn)載于:https://www.cnblogs.com/luogankun/p/3954297.html
總結(jié)
以上是生活随笔為你收集整理的JavaScript对象的创建之构造函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 关于ListView中按
- 下一篇: gradle idea java ssm