1

我对 JavaScript 中的 instanceof 有基本的了解,测试左侧对象是否“属于”右侧对象类型。以下 2 个示例帮助我理解...

var demo1 = function() {};
demo1.prototype = {
foo: "hello"
};

var demo2 = function() {
var pub = {
    bar:"world"
};
return this.pub;
};

var obj1 = new demo1();
var obj2 = new demo2();

console.log(obj1 instanceof demo1);  //returns true
console.log(obj2 instanceof demo2);  //returns true

但是在这第三个例子中,我弄错了,我不明白为什么....

var o = {}; // new Object;
o.toString(); // [object Object]
console.log(o instanceof toString); //returns false

感谢您在了解发生了什么方面提供的任何帮助。另外......是否有可能使第三个例子成为真实?

再次感谢

4

3 回答 3

4

toString不会导致 的类型更改o。它只是返回对象的字符串表示,而不改变它。所以,o仍然是一个简单的对象,没有instanceof String.

var o = {}; // new Object object
var ostring = o.toString(); // "[object Object]"
typeof o; // object
typeof ostring; // string - this is a primitive value, not an object; so that
ostring instanceof String; // is false
var stringobj = new String(ostring); // new String object
typeof stringobj; // object
stringobj instanceof String; // true!
o instanceof Object; // also true!

另请参阅构造函数的 MDN 参考String

于 2012-10-15T14:09:58.443 回答
1

使用像这样的对象文字

var o = {}; // new Object;

您创建一个原型为Object. 测试instanceof不会产生任何有用的信息。唯一会产生真的比较是

o instanceof Object
于 2012-10-15T14:07:24.623 回答
1

o是一个objecttoString是一个function。它们是 JavaScript 中的不同类型。

alert(typeof(o));  //"object"
alert(typeof(toString)); //"function"

JavaScript 区分对象和函数。因此,这就是您false在示例中返回的原因。

于 2012-10-15T14:09:05.510 回答