簡體   English   中英

一個方法可以找出其父對象的“this”嗎?

[英]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.callFunction.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM