`Object.prototype.toString.call(o).slice(x,y);`
这个?
o.toString().slice(x.y);
//为什么那些不同,调用应该改变被调用方法的'this'值 //并且toString已经被继承,
var x = 44 ;
`Object.prototype.toString.call(x)`; //"[object Number]"
x.toString(); // '44'
答案 0 :(得分:1)
您没有在此方法上调用.call
:
Object.prototype.toString(o).slice(x,y);
相反,您只需使用o
作为参数调用方法(在原型对象上)。
获取一个等效的方法来调用
o.toString().slice(x.y);
(调用o
对象上的方法,没有参数),你需要使用
o.toString.call(o).slice(x.y);
为什么
x.toString()
与Object.prototype.toString.call(x)
不同?
由于x = 44
是一个数字,当您访问x.toString
时,您会获得Number.prototype.toString
method而不是Object.prototype.toString
method。你也可以写
Number.prototype.toString.call(x)
获取"44"
。
答案 1 :(得分:0)
使用第二个并检查一个类(您的第一个案例)与该类的实例(第二个案例)之间的区别。
http://en.wikipedia.org/wiki/Instance_(computer_science)
它是一种面向所有语言的通用面向对象编程问题。
反正: Object.prototype.toString(o)返回" Object对象"所以它不适合你。
答案 2 :(得分:0)
第一个(Object.prototype.toString
)调用对象的内置函数或默认的toString函数,第二个函数调用o
的toString函数,该函数可能已被覆盖,也可能未被覆盖
var o = {};
o.toString();
// "[object Object]"
o.toString = function(){};
o.toString();
// undefined
Object.prototype.toString.call(o);
// "[object Object]"
使用数字(例如44),toString函数与对象不同。调用值为44的变量的toString函数实际上会Number.prototype.toString.call()
。因此产出不同。
几种不同的类型:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toString https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/toString https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toString