乙個簡單的例子:
1.
window.name =
"window"
;
2.
var
run =
function
()
5.
run();
window.name = "window"; var run = function() run()
執行**
這裡你不能說run是作為window的乙個屬性而存在,但它的確是被window屬性呼叫了。實質上大多數暴露在最上層的東西都則window接管了。在它們需要呼叫時被拷貝到window這個物件上(不過在ie中window並不繼承物件),於是有了window['***']與window.***效能上的差異。這是內部實現,不深究了。
另乙個例子,繫結到乙個明確的物件上
1.
window.name =
"window"
;
2.
object =
7.
};
8.
object.run();
window.name = "window"; object = }; object.run();
執行**
答案顯然易見,this總是為它的呼叫者。但如果複雜一點呢?
01.
window.name =
"window"
;
02.
object =
08.
inner();
09.
}
10.
};
11.
object.run();
window.name = "window"; object = inner(); } }; object.run();
執行**
01.
window.name =
"window"
;
02.
var
object =
08.
inner.call(
this
);
09.
}
10.
}
11.
object.run();
window.name = "window"; var object = inner.call(this); } } object.run();
執行**
01.
window.name =
"window"
;
02.
var
cat = ;
05.
var
dog =
10.
};
11.
dog.sound(
" is pooping"
);
12.
dog.sound.call(window,
" is banking"
);
13.
dog.sound.call(dog,
" is banking"
);
14.
" miaowing"
]);
執行**
由此prototype開發者搞了乙個非常有名的函式出來,bind!以下是它的乙個最簡單的版本:
1.
var
bind =
function
(context, fn)
5.
}
執行**
不過為了面對更複雜的情況建議用以下版本。
1.
function
bind(context,fn) :
function
() ;
8.
};
它還有乙個孿生兄弟叫bindaseventlistener ,繫結事件物件,沒什麼好說的。
1.
2.
var
bindaseventlistener =
function
(context, fn)
6.
}
prototype的版本
01.
function.prototype.bind =
function
()
09.
}
執行**
bind函式是如此有用,google早早已把它加入到function的原型中了(此外還有inherits,mixin與partial)。
//在chrome中 var a = function(){}; alert(a.bind)
執行**
有繫結就有反繫結,或者叫剝離更好!例如原生物件的泛化方法我們是無法通過遍歷取出它們的。
1.
for
(
var
i
in
array)
4.
for
(
var
i
in
array.prototype)
for(var i in array) for(var i in array.prototype)
執行**
要取出它們就需要這個東西:
1.
var
_slice = array.prototype.slice;
2.
function
unbind(fn) ;
6.
};
示例以前也給過了,請見這裡
總結:this 的值取決於 function 被呼叫的方式,一共有四種,
21th 動態規劃 路面修整
fj打算好好修一下農場中某條凹凸不平的土路。按奶牛們的要求,修好後的路面高度應當上公升或下降,也就是說,高度上公升與高度下降的路不能同時出現在修好的路中。整條路被分成了n段,n個整數a 1,a n 依次描述了每一段路的高度。fj希望找到乙個恰好含n個元素的不上公升或不下降序列b 1,b n,作為修過...
JavaScript動態載入
在做專案的過程中需要用到動態載入,如何做,剛開始很為難。什麼是動態載入呢?比如說,新增便簽時,在往庫里插入資料的同時需要顯示在介面上,新增資料後重新整理頁面是可以獲得,但是沒插入一條資料都要重新整理介面的話,不僅麻煩,還很慢。所以就需要用到動態載入。經過不懈努力,其實,也就是動態拼接字串而已。再新增...
Javascript動態修改select選項
1 向select裡新增option js ie only,ff不支援add方法 function fnadditem text,value ie ff both ok function fnadd olistbox,sname,svalue 2 刪除select裡的option js functi...