我試圖在由對象的方法調用的函數內部使用關鍵字this
。在該方法的範圍內,值爲this
是對象。但是,在該方法調用的函數範圍內,this
的值不是對象。javascript:方法調用的函數內的「this」的值
我想通了,如果我通過this
作爲參數,該功能的作品。當字面使用this
時,該功能不起作用。
我知道this
裏面的值是一個方法的對象。什麼規則決定了該方法調用的函數範圍內的this
的值?在定義函數的時間/範圍(而不是在被調用的時間/範圍),它是否爲this
的值?
錯誤的代碼:
var setHeightTop = function(h,t){
var prevWellHeight = $(this).parent().prev().height();
$(this).css({
"height": function() {return (prevWellHeight - h);},
"top": function() {return -(prevWellHeight - t);}
});
};
var recalcConnectorLines = function() {
$(".well + .well > .connectLine").each(function() {
setHeightTop(1,28);
});
};
運作代碼:
var setHeightTop = function(obj,h,t){
var prevWellHeight = $(obj).parent().prev().height();
$(obj).css({
"height": function() {return (prevWellHeight - h);},
"top": function() {return -(prevWellHeight - t);}
});
};
var recalcConnectorLines = function() {
$(".well + .well > .connectLine").each(function() {
setHeightTop(this,1,28);
});
編輯:解。
基於Mentok的鏈接,我已經想通了兩件事情:
的
this
在函數的值設置爲時間函數定義 。這解釋了我在錯誤的 代碼中看到的行爲。但是,如果我調用我的函數作爲方法,
this
將被定義在 時間該方法被調用。
正如在jQuery文檔中解釋的here,可能會向jQuery對象添加新方法。
我改進的幹代碼:
$.fn.setHeightTop = function(h,t) {
$(this).each(function() {
var prevWellHeight = $(this).parent().prev().height();
$(this).css({
"height": function() {return (prevWellHeight - h);},
"top": function() {return -(prevWellHeight - t);}
});
});
};
var recalcConnectorLines = function() {
$(".well + .well > .connectLine").setHeightTop(1,28);
};
它的工作原理!
檢查[this](http://www.quirksmode.org/js/this.html)out(雙關意圖) – Mentok
當函數被調用作爲該對象的一個方法時,它將採用一個對象的值, '這樣做是正確的,但這種情況發生的唯一方法是通過使用notation object.method或object [「method」]將該方法作爲對象的屬性來調用。在你的例子中,這個值是由jQuery – user3417400
@Mentok定義的:這有幫助!但是,這意味着每次我想使用該函數時,都需要設置一個等於該函數的變量。我打算在一些對象上使用這個函數。有沒有辦法減少冗餘?我將該函數定義爲所有jQuery對象的方法嗎? –