文章目錄

真是沒有想到,又一篇..關於scope的東西~ = . .= 不過,這篇是打算稍微區分一
下關於變數的種類。畢竟,大家在coding的時候,除了全域區域變數的辨別外,還
是有需要把一些東西做private或public的需求。這篇就是要講private或是public
那些東西。

###PRIVATE

以JS來說,private的變數,只有一種情況,需要滿足下面的constrain:

  1. 用var做declare。
  2. 被包在一個function裡面。

就像下面這個codeblock一樣。

private
1
2
3
4
5
var example = function() {
var a = 123;
};
example();
console.log(a); // error, a is not defined

###PUBLIC

其實認真的說起來,js除了private以外,通通可以說是public的(相對來說),
他並不存在著什摸static或friend那類比較細的區分和規定。

題外話,關於js的oo寫法,主要是繼承什摸的那類,其實,自己刻起來我是覺
得有點彆扭。不過,如果是用coffee寫的話,我可以當作什摸都不知道~w 需要
的時候再搭配個backbone~ @ w@++

####new function

其實,那個小標題我不知道該怎摸下。哈..總之這部份看起來有點像OO,是關於
js的new function產生instance的部份。

######1. this

public1
1
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

public2
1
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

function
1
2
3
4
person.space = "room";
console.log(Mary.space); // undefined
console.log(ghost.space); // undefined
console.log(person.space); // room

######2. object type

array
1
2
3
4
5
var arr = [1, 2, 3];
arr.out = function() {
console.log("I have " + this.length + " element(s).");
};
arr.out();
string
1
2
3
4
5
var str = new String("I am a string");
str.out = function() {
console.log(this.toString());
};
str.out();
number
1
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

  1. this.xxx

  2. function.prototype.xxx

  3. function.xxx

  4. object.xxx

文章目錄