新增對私有資料成員的支援

2021-08-07 07:30:38 字數 1656 閱讀 5378

問題:你已將發現了可復用的功能,並且建立乙個物件,將該功能定義為物件的方法。然而還需要新增對私有資料成員的支援

解決方案:確保乙個資料成員不會暴露給公共訪問的一種方法是,將該物件從新定義為乙個函式,它帶有公開暴露的方法,或者帶有使用私有資料或方法的資料物件。

例如我們對下列物件改寫,新增對私有資料成員的支援

var clobject = else

if(document.defaultview && document.defaultview.getcomputedstyle)

return

undefined;

},getelem:function

(id),

stripslashes:function

(str),

removeanglebrackets:function

(str)

}console.log(clobject.tostring());

console.log(clobject.removeanglebrackets("yes>no<=no"));

簡單的函式到物件的轉換,在全域性命名空間上要比在單個函式上容易,然而這種性質的一次性物件也有缺點,包括不能新增可供所有物件方法訪問的私有資料。

有一種方法將物件轉化為宣告的函式並且**所有方法,使用this。

//不能新增私有變數

var ownobject = ,

}console.log(ownobject.name);

//使用this 將物件轉化為宣告函式,暴露方法但是不暴露私有資料變數

function

ownfuntion()}

var obj = new ownfuntion();

console.log(obj.name);//因為是私有變數所以不能在外部訪問到,輸出undefined

console.log(obj.getname());//gray,暴露的方法來訪問內部的私有資料變數

還有一種更高效優雅的方法,就是使用iief來封裝物件的方法和資料。這種方法建立了乙個單體,就是乙個單個的物件,而不是例項化的物件,它還允許我們使用乙個函式或乙個物件作為庫物件的核心。

與簡單物件相比其主要差異在於:

+ 單體實現在init()中建立,當呼叫getinstance()函式的時候會呼叫init方法,如果該例項已經存在,則返回最初已經存在的例項,如果沒有就建立乙個新的例項,

var clsingleton = (function

(), stripslashes:function

(str),

removeanglebrackets:function

(str)};}

return

return instance;}};

})();

var clcb = clsingleton.getinstance();

var clcb2 = clsingleton.getinstance();

console.log(clcb ===clcb2);//true

console.log(clcb.removeanglebrackets("yes>no<=no"));//yes>no<=no

類的私有資料成員的訪問

類的私有資料成員智慧型在類體哪被訪問,不能夠在類體外通過物件名直接訪問,考察下面的類 class point1 point1 point1 point1 point1 void point1 setpoint int x,int y,int z void point1 display 執行結果 12...

給ctags新增對Elixir的支援

ctags 官方已經許久未更新了,截至本文寫作時止,最後一次更新在 2009 07 09,所以很多新出的語言都沒能得到支援 現在 github 上有乙個 fork 出來的專案叫 universal ctags,它拾起了對 ctags 的更新,但是很遺憾,elixir 也暫未得到支援 好在 ctags...

對類裡成員函式返回私有資料成員的操作

對類裡面的私有指標,自己犯這樣的錯誤 1 對返回指標直接賦值 god.return pointer change n 當然這樣編譯器會報錯。2 妄想通過別的指標賦值 char p god.return pointer p change n 這樣私有成員指標當然沒有被改變到。確做法應該是增加乙個 vo...