Наследование JavaScript - PullRequest
5 голосов
/ 14 июля 2010

Может быть, этот вопрос прост, но я не могу понять сейчас.

String.prototype.self=function()
{
    return this;
}
var s="s";

alert("s".self()=="s".self()) //false;
alert(s.self()==s.self()) //false;

Если вы знаете причину, скажите, пожалуйста, почему результат «ложный».

1 Ответ

8 голосов
/ 14 июля 2010

Это связано с тем, что при обращении к свойству из примитивного значения, такого как "s", свойство доступа принудительно вызывает его ToObject, и сравнение завершается неудачно, поскольку проверяется две разные ссылки на объект.

Например:

String.prototype.test = function() {
  return typeof this;
}

"s".test(); // "object"

Это как сравнение:

new String("s") == new String("s"); // false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...