作者: ray81880 時間: 2014-7-15 22:45 標題: Javascript problem
近日要 support 一些 js program, 但小弟唔係太熟 js, 想請教大家.
在 source code 中, 時常看到類似以下 coding:
var proj = proj || {};
(function () {
var functA = function {
var base = {}; // 這裡開始不明白. getString declare 後又再 call 返
base.getString = this.getString;
this.getString = function () {
var strings = base.getString.call($this);
return strings.concat(["ab","cd","ef"]);
};
};
})();
1. 請問以上的程式是做甚麼?
2. 這種模式的寫法, 有沒有特定的名稱 (如 closure, truly and falsy)
萬分感謝!
作者: KinChungE 時間: 2014-7-16 07:14
var base = {}; <-- declare base as JSON
base.getString = this.getString; <-- add this.getString to base
以上兩句, 如果一次過寫哂就係
var base = { getString: this.getString };
作者: gamezz 時間: 2014-7-16 23:44
回覆 2# KinChungE
請問
(function () {
var functA = function {
//do something
};
};
})();
同
function functA(){
//do something
}
有咩分別?
作者: tonyli1212 時間: 2014-7-16 23:53
- (function () {
- var functA = function {
- //do something
- };
- };
- })();
- alert(functA);
- function functA(){
- //do something
- }
- alert(functA)
回覆 KinChungE
請問
(function () {
var functA = function {
//do something
...
gamezz 發表於 2014-7-16 23:44
作者: FlyingForever 時間: 2014-7-17 01:11
本帖最後由 FlyingForever 於 2014-7-17 15:25 編輯
你比段Source Code似乎有D問題喎……
- var proj = proj || {}; // 唔關事
- (function () {
- var functA = function() { // 原版漏括孤
- var base = {};
- base.getString = this.getString;
- this.getString = function () {
- var strings = base.getString.call(this); // 應該係就咁this而唔係原版既$this?但Google又好似真係有$this既用法……
- return strings.concat(["ab","cd","ef"]);
- };
- };
- })();
因為個function係自己既function scope入面define左一個variable functA
但define完之後咩都冇做過,個function就結束左
由於functA只係係function scope入面,所以function外面根本call唔到佢
正如以下既寫法:
- (function() {
- var i = 10;
- })();
睇返入面段Code,functA係擴展緊this.getString
(唔好問我個this點黎,我都望唔透,請其他師兄指點……)
首先將this.getString呢個function複製一份,變成base.getString
然後this.getString改寫成「call返base.getString,之後再作修改」
咁由於base.getString係原版既this.getString,所以實際上係對this.getString進行擴展
作者: KinChungE 時間: 2014-7-17 07:10
你比段Source Code似乎有D問題喎……Run完之後咩都唔會發生
因為個function係自己既function scope入面defi ...
FlyingForever 發表於 2014-7-17 01:11
(function() {})();代表document ready後先開始做
但係留意, 括號入面declare左既野, 出面拎唔翻
作者: Charcoal99 時間: 2014-7-17 10:09
google "Self Invoked Anonymous Function" & "Immediately-Invoked Function Expression" yourself
作者: chi251155 時間: 2014-7-17 10:31
回覆 6# KinChungE
This is not correct. What you stated is for jquery only and with a "$" at the beginning.
作者: FlyingForever 時間: 2014-7-17 19:41
回覆 6# KinChungE
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>immediate function test</title>
- </head>
- <body>
- <script>
- (function() {
- alert(document.getElementById("test"));
- })();
- </script>
- <div id="test"></div>
- </body>
- </html>
如果將script放係div後面,就會出DOM Object
作者: KinChungE 時間: 2014-7-17 19:43
記錯野添
即係呢個做法純綷用黎避免撞variable name?
作者: 神秘二代 時間: 2014-7-17 22:09
本帖最後由 神秘二代 於 2014-7-17 22:14 編輯
呢個做法只係protect入面d野唔可以比出面call
類似private class咁.....
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="UTF-8">
- <title>immediate function test</title>
- </head>
- <body>
- <script>
- (function() {
- var test_variable = 1;
- function test(){
- alert("123");
- }
- test();
- })();
- try{
- test();
- }catch(e){alert(e);}
- try{
- alert(test_variable);
- }catch(e){alert(e);}
- var test_variable_2 = 1;
- function test2(){
- alert("123");
- }
- try{
- test2();
- alert(test_variable_2);
- }catch(e){alert(e);}
- </script>
- </body>
- </html>
作者: KinChungE 時間: 2014-7-17 23:04
即係scope既分別

