js Object屬性及方法的理解

前言

一下僅個人的理解。還是特別前調一下,因爲內容中涉及大量我以爲別人的想法,但或許是我人傻理解成了別人是那麼種想法
關於Object,簡單的理解可以解釋爲封裝對象,擁有屬性和方法。比如對象:貓,屬性:體重,方法:喫;
那麼js如何定義對象兩者如何又有何區別;
那麼由淺入深的來說說:
一般情況下定義一個對象;

var cat = {
"weight" : "10",
"eat" : function(v){
    return console.log("貓喫"+v);
    }
}

很多人簡單的告訴別人屬性即值,方法一般用函數的形式,可以封裝賦值封裝行爲。
但是我想問一個問題。上述代碼中寫出cat的屬性;
我也試着在各個羣裏問了一下。然後估計被當白癡無視了。

上代碼

        var ceshi = new Object;
        var v;
        Object.defineProperty(ceshi, "_a", {//定義對象屬性_a
            get:  function () {
                return v;
            },
            set: function (value) {
                v = value;
            }
        });
        Object.defineProperty(ceshi, "b", {//定義對象方法b,給_a賦值
            value: function(v) {
                this._a = v;
                return this;
            }
        });

測試結果

//給_a賦值
        ceshi._a = "11";
        console.log(ceshi._a);//11
        //通過調用方法b給_a賦值
        ceshi.b("22");
        console.log(ceshi.b);   //function(v) {
                                //      this._a = v;
                                //      return this;
                                //  }
        console.log(ceshi._a);  //22
        //當出現語法錯誤時,結果如何
        ceshi.b = "33";
        console.log(ceshi.b);   //function(v) {
                                //      this._a = v;
                                //      return this;
                                //  } ceshi.b並沒有被重置
        console.log(ceshi._a);  //22;依舊是22

意義何在

常規寫法

        ceshi._a = function (value) {
            return value;
        }
        ceshi.b = function (value) {
            this._a = value;
            return this;
        }

結果

    //給_a賦值
        ceshi._a = "11";
        console.log(ceshi._a);//11
        //通過調用方法b給_a賦值
        ceshi.b = "33";
        console.log(ceshi.b);   //33  ___方法被重寫
        console.log(ceshi._a);  //11
        //當出現語法錯誤時,結果如何
        ceshi.b("22");
        console.log(ceshi.b);   //Uncaught TypeError: ceshi.b is not a function
        console.log(ceshi._a);  //
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章