Всякий раз, когда я нахожу ключевое слово this
в коде JavaScript, я обычно просто смотрю вверх, пока не найду окружающую функцию, в которой он находится.
Затем я пытаюсь понять, как эта функция вызывается из снаружи . Это важно, потому что значение this
изменяется в зависимости от того, как вызывается функция.
Из вашего кода кажется, что работа String.method()
заключается в добавлении методов в цепочку прототипов объекта String . Это то, что вы не должны делать на самом деле, это своего рода плохое поведение JavaScript и может вызвать некоторые проблемы в дальнейшем.
Однако, ради объяснения, всякий раз, когда вы вызываете метод deentityify
для строки, такой как "foo".deentityify()
- предположим, что это вызывает то, что вы назначили в String.method('deentityify', function () {
- this
, в действительности становится другой функцией (если String.method
работает так, как я думаю).
Таким образом, при использовании "foo".deentityify()()
ваш this
будет ссылаться на вызывающего абонента, то есть "foo".deentityify()
. А вызывающий "foo".deentityify()
на самом деле "foo"
сам.
Так что в основном this
, в вашем случае, относится к объекту String, из которого вы вызываете метод.