本篇文章講述瞭如何使用JavaScript封裝一個類,大家對使用JavaScript封裝一個類不了解的話或者對使用JavaScript封裝一個類感興趣的話那麼我們就一起來看看本篇文章吧,好了廢話少說進入正題吧
學過其他物件導向語言的JavaScripter,可能都應用過類,如:class{},等定義的一系列方法,
但是初學者看是學習js的時候,經常會看到這樣一句話,那就是JavaScript是面向對象語言,可是自己無論怎麼學習,都不太清楚面向對象編程,我也是如此,開始一直糾結js面向對象編程,這幾天算是有所了解了,談談我對js類的理解。 。 。
所謂類,會有以下功能:
1、建構器
2、靜態屬性,靜態方法
3、共有屬性,共有方法
4、私有屬性,私有方法
本文就說說如何用js實作對類別的封裝,實作上述功能,
var Person = function(name, age){ this.name = name; this.age = age; this.sayName = function(){ console.log(this.name); }; }
如何你覺得Ta不像類別的話,那麼你可以這樣做
var Person = function(name, age){ //共有属性 this.name = name; this.age = age; //共有方法 this.sayName = function(){ console.log(this.name); }; }
如果對於建構子模式不太清楚的話,可以看看這裡js建立物件之設計模式
有了上面的範例之後,我們在此基礎之上就可以進行我們的完善了。
var Person = function(name, age){ //共有属性 this.name = name; //共有方法 this.sayName = function(){ console.log(this.name); }; //静态私有属性(只能用于内部调用) var home = "China"; //静态私有方法(只能用于内部调用) function sayHome(){ console.log(home); } //构造器 this.setAge = function(age){ console.log(age + 12); }; this.setAge(age); }//静态方法(只能被类来访问)Person.sayAge = function(){ console.log("your age is 12"); }//静态属性(只能被类来访问)Person.drink = "water";//静态共有方法(类和实例都可以访问)Person.prototype.sayWord = function(){ console.log("ys is a boy"); }
js中利用上述的模擬方法,實現了對類別的創建,在此基礎上,我們不安現狀,想要對他進行封裝,讓他成為一個整體,更利於體現js的封裝性。
這裡我們用閉包來實現,先解釋下閉包的概念。
閉包概念:一個函數有權存取另一個函數作用域中的變量,即在一個函數內部建立另一個函數
實作如下:
var Person = (function(){ //静态私有属性方法 var home = "China"; function sayHome(name){ console.log(name + "'s home in " + home); } //构造函数 function _person(name, age){ var _this = this; //构造函数安全模式,避免创建时候丢掉new关键字 if(_this instanceof _person){ //共有属性, 方法 _this.name = name; _this.getHome = function(){ //内部访问私有属性,方法 sayHome(_this.name); }; _this.test = sayHome; //用于测试 //构造器 _this.setAge = function(age){ _this.age = age + 12; }(age); }else{ return new _person(name, age); } } //静态共有属性方法 _person.prototype = { constructor: _person, drink: "water", sayWord: function(){ console.log("ys is a boy"); } } return _person; })();
呼叫如下:
var p1 = new Person("ys", 12); p1.getHome(); //ys's home in China console.log(p1.age); //24 var p2 = Person("ys", 12); p2.getHome(); //ys's home in China console.log(p2.age); //24 console.log(p2.test == p1.test); //true, 证明静态私有变量共享性
如上面的程式碼一樣,我們就用js實作了類別
#總結:
1、有些公共屬性,方法,可以設定為靜態的,這樣可以在每次實例化的時候,不需要額外開闢記憶體資源,達到真正意義上的共享,
#2、有些公共的屬性方法,只想在內部程式處理時候達到共享,則設定為,靜態私有屬性方法,
3、有些公共的屬性方法,想在實例物件中達到共享,則設定為prototype屬性方法,
以上就是本篇文章的所有內容,大家要是還不太了解的話,可以自己多實現兩邊就很容易掌握了哦!
相關推薦:
以上是使用JavaScript封裝一個類別的詳細內容。更多資訊請關注PHP中文網其他相關文章!