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

しかし、この 3 番目の例では、false になり、その理由がわかりません....

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

何が起こっているのかを理解するのに助けてくれてありがとう。また... 3番目の例を真にすることは可能ですか?

再度、感謝します

4

3 に答える 3

4

toStringの型変更は発生しませんo。オブジェクトを変更せずに、オブジェクトの文字列表現を返すだけです。したがって、oはまだ単純なオブジェクトであり、 no 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も、有用な情報は得られません。true を生成する唯一の比較は、

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 に答える