根据我的理解,前者会:
toString
方法
value
上调用它,但this
绑定到value
value.toString()
会。
toString
的原型链value
方法
toString
绑定到this
的值作为值调用所以不同的是,如果值中有一个被覆盖的toString
方法......它会使用它。
我的问题是:
Parent
的方法而不是被Child
覆盖的某些方法,那么这种模式是否会使用标准模式? (在这种情况下,Parent = Object,Child =类值来自,如果我们正在考虑经典,并且method = toString。)答案 0 :(得分:6)
Object.prototype.toString.apple(value)
可让您拨打null
,当您使用null.toString()
时,会产生错误。
Object.prototype.toString.apply(null);
>"[object Null]"
null.toString();
>TypeError: Cannot call method 'toString' of null
答案 1 :(得分:5)
Object.prototype.toString
可以采用与value.toString()
不同的方法,具体取决于后者是什么。
> Object.prototype.toString.apply("asdfasdf")
"[object String]"
> "asdfasdf".toString()
"asdfasdf"
> Object.prototype.toString.apply(new Date)
"[object Date]"
> (new Date).toString()
"Tue Mar 05 2013 20:45:57 GMT-0500 (Eastern Standard Time)"
.prototype[function].apply
(或.call
或.bind
)允许您更改方法的上下文,即使上下文可能根本没有这样的方法。
var o = {};
o.prototype = {x: function () { console.log('x'); }}
var y = {}
o.prototype.x.call(y)
y.x(); //error!
......所以就是说
答案 2 :(得分:2)
是的,你做对了。我通常不会看到人们直接这样调用Object.prototype.toString
(让对象覆盖他们的toString
方法通常是有意义的)但它肯定非常常见,并推荐用于其他方法,如{{1 }}