コンソールでテストしたときに、読んでいたコードで見つけたものを次に示します。
Object.prototype.toString("foo"); // 出力: "[オブジェクト オブジェクト]" Object.prototype.toString.call("foo"); // 出力: "[オブジェクト文字列]"
かすかな考えがあると思いますが、言葉で表現できません... 誰か説明できますか?
コンソールでテストしたときに、読んでいたコードで見つけたものを次に示します。
Object.prototype.toString("foo"); // 出力: "[オブジェクト オブジェクト]" Object.prototype.toString.call("foo"); // 出力: "[オブジェクト文字列]"
かすかな考えがあると思いますが、言葉で表現できません... 誰か説明できますか?
2 つの呼び出しは同等ではありません。
最初の呼び出し:
Object.prototype.toString("foo");
toString
のコンテキストでメソッドを呼び出し、Object.prototype
追加の"foo"
パラメーター (未使用) を使用し、 でObject.prototype
あるObject
ため、結果は次のようになります。[object Object]
2 番目の呼び出し:
Object.prototype.toString.call("foo");
toString
のコンテキストでメソッドを呼び出し、そこからオブジェクトを構築します ( "foo"
) 。したがって、結果は次のようになります。Object.prototype.toString
new String("foo")
[object String]
の最初のパラメーターは、関数の最初のパラメーターではなく、関数内にcall
あるオブジェクトです。this
"use strict";
function test(a,b) {
console.log(this, a, b);
};
var obj = {
'func' : test
}
test(1,2) // outputs undefined 1 2
test.call(1,2); // outputs 1 2 undefined
obj.func(1,2) // outputs obj 1 2
obj.func.call(1,2) // outputs 1 2 undefined