javascript的继承

use*_*376 5 javascript primitive object

也许这个问题很容易,但我现在无法理解.

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

alert("s".self()=="s".self()) //false;
alert(s.self()==s.self()) //false;
Run Code Online (Sandbox Code Playgroud)

如果你知道原因,请告诉我为什么结果是"假的".

CMS*_*CMS 8

这是因为当从原始值访问属性时,例如"s",属性加速器在内部强制它ToObject,并且比较失败,因为它检查两个不同的对象引用.

例如:

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

"s".test(); // "object"
Run Code Online (Sandbox Code Playgroud)

这就像比较:

new String("s") == new String("s"); // false
Run Code Online (Sandbox Code Playgroud)

  • @Graphain在表达式`s.self()== s.self()`中,`s`变量中包含的值被强制两次`ToObject`,因为`s`包含一个原语,当点(` .`)使用属性访问器,强制对象以便能够访问`String.prototype`成员.比较大致相当于`var s ='s'; new String(s)== new String(s);`也产生`false`. (2认同)