使用JavaScript封裝一個類別

韦小宝
發布: 2023-03-21 12:58:01
原創
2216 人瀏覽過

本篇文章講述瞭如何使用JavaScript封裝一個類,大家對使用JavaScript封裝一個類不了解的話或者對使用JavaScript封裝一個類感興趣的話那麼我們就一起來看看本篇文章吧,好了廢話少說進入正題吧

學過其他物件導向語言的JavaScripter,可能都應用過類,如:class{},等定義的一系列方法,
但是初學者看是學習js的時候,經常會看到這樣一句話,那就是JavaScript是面向對象語言,可是自己無論怎麼學習,都不太清楚面向對象編程,我也是如此,開始一直糾結js面向對象編程,這幾天算是有所了解了,談談我對js類的理解。 。 。

所謂類,會有以下功能:

1、建構器

2、靜態屬性,靜態方法

3、共有屬性,共有方法

4、私有屬性,私有方法

本文就說說如何用js實作對類別的封裝,實作上述功能,

1.一個簡單的類別

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建立物件之設計模式

2.一個複雜的類別

有了上面的範例之後,我們在此基礎之上就可以進行我們的完善了。

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的封裝性。

3.封裝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封裝的各種寫法

Javascript封裝手機類別函數程式碼實例詳解

以上是使用JavaScript封裝一個類別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!