[英]Can a javascript object override its parent method and call it in that method?
[英]Can a method find out the “this” of its parent object?
假設我已經提出了一個特殊的排序函數,我想把它放在一些基於數組的對象的原型中(我將在這里使用數組)。 我可以
Array.prototype.specialSort = function...
但我真正想做的是
Array.prototype.sort.special = function...
問題當然是,當它被調用時,后者不會知道Array對象,它只會知道排序,所以它無法排序。 是否有任何神奇的咒語可以將“這個”傳遞到樹下?
次要問題(因為對主要問題的回答很可能是“不”):你會采取什么措施來實現最優雅的“子方法”概念?
這應該非常接近你想要的:
Array.prototype.sort = function () {
return {
self: this;
, special: function () {
return sortLogic (self);
}
};
};
var xs = [1, 2, 3];
xs.sort ().special ();
另一種選擇是使用Function.prototype.call
或Function.prototype.apply
,特別是如果你想讓arr.sort ()
正常排序列表。
Array.prototype.sort.special.call (arr, arg1, arg2, etc);
在第一個方法上使用第二個方法允許使用call
並在sort.special
方法上輕松apply
方法。 在執行以下操作時可能很有用:
function () {
Array.prototype.sort.special.call (arguments);
}
如果你想要兩個世界,這樣的東西可以工作:
Array.prototype.sort = (function () {
var special = function () {
if (this [0] > this [1]) {
var tmp = this [0];
this [0] = this [1];
this [1] = tmp;
}
return this;
};
var sort = function () {
var context = this;
return {
special: function () {
return special.apply (context, arguments)
}
};
};
sort.special = special;
return sort;
}) ();
/*** Example Below ***/
function foo () {
Array.prototype.sort.special.call (arguments);
var xs = [5, 2, 3];
xs.sort ().special ();
alert (arguments);
alert (xs);
}
foo (9, 6);
感謝您的指導,這兩個尖尖和trinithis。 我想我現在對這個問題很清楚了。 關鍵點在於,雖然sort()是Array的一個方法,但是如果它沒有被調用,它只是一個成員(或屬性),所以它沒有“this”。 如果它被調用的話我本來想要的“這個”。 而且由於我在鏈的末尾調用了一些東西 ,我有點希望有一些魔法可以保留所有方法。 但不是。
我可能會做的是有一個單獨的“排序”方法作為我的特殊方法的石斑魚,並留下現有的排序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.