文章目錄
真是沒有想到,又一篇..關於scope的東西~ = . .= 不過,這篇是打算稍微區分一
下關於變數的種類。畢竟,大家在coding的時候,除了全域區域變數的辨別外,還
是有需要把一些東西做private或public的需求。這篇就是要講private或是public
那些東西。
###PRIVATE
以JS來說,private的變數,只有一種情況,需要滿足下面的constrain:
- 用var做declare。
- 被包在一個function裡面。
就像下面這個codeblock一樣。
private1 2 3 4 5
| var example = function() { var a = 123; }; example(); console.log(a);
|
###PUBLIC
其實認真的說起來,js除了private以外,通通可以說是public的(相對來說),
他並不存在著什摸static或friend那類比較細的區分和規定。
題外話,關於js的oo寫法,主要是繼承什摸的那類,其實,自己刻起來我是覺
得有點彆扭。不過,如果是用coffee寫的話,我可以當作什摸都不知道~w 需要
的時候再搭配個backbone~ @ w@++
####new function
其實,那個小標題我不知道該怎摸下。哈..總之這部份看起來有點像OO,是關於
js的new function產生instance的部份。
######1. this
public11 2 3 4 5 6 7 8 9 10 11
| var person = function(params) { var name = params.name; this.getName = function() { return name; }; return this; }; var Mary = new person({ name: "Mary" }); console.log(Mary.getName());
|
######2. prototype
public21 2 3 4 5 6 7 8 9
| person.prototype.scream = function(content) { console.log(this.getName() + " is screaming '" + content + "'"); }; var ghost = new person({ name: "ghost" }); ghost.scream("Oh, no~~~~~~~~~~!!"); Mary.scream("Oh, no~~~~~~~~~~!!");
|
###everything could have data
######1. function type
function1 2 3 4
| person.space = "room"; console.log(Mary.space); console.log(ghost.space); console.log(person.space);
|
######2. object type
array1 2 3 4 5
| var arr = [1, 2, 3]; arr.out = function() { console.log("I have " + this.length + " element(s)."); }; arr.out();
|
string1 2 3 4 5
| var str = new String("I am a string"); str.out = function() { console.log(this.toString()); }; str.out();
|
number1 2 3 4 5
| var num = new Number(5); num.out = function() { console.log("I am number " + this.toString()); }; num.out();
|
###總結
#####使用時機
######1. private
不想被看到的、通通放在function裡面,作為private data
######2. public
this.xxx
function.prototype.xxx
function.xxx
object.xxx