基本上,我想知道对象实例的覆盖/添加方法与JS对象的“Class”实例上的方法之间的区别是什么/是什么区别(是的类不是正确的单词,不确定是什么)
例如,为什么这不起作用?
Date.prototype.now= function (){
return 23;
}
$('#foo').append(Date.now());
但是,这样做了吗?
Array.prototype.indexOf = function(){
return 23;
}
var bar = Array();
bar[0] = "a";
$('#bar').append(bar.indexOf("a"));
答案 0 :(得分:4)
now
is a static method on Date
。它不是实例方法;在Date.prototype
上没有定义。它直接在Date
对象上定义。当你写
Date.prototype.now = function () {
return 23;
}
你实际上并没有覆盖Date.now()
调用的函数。
另一方面,indexOf
for arrays is an instance method.也就是说,它是在Array.prototype
上定义的,所以在你写的时候
Array.prototype.indexOf = function(){
return 23;
};
实际上你正在改变
所调用的indexOf
函数
var bar = [];
bar.indexOf('a');
看到区别? http://jsfiddle.net/mattball/7qVQy/
我建议阅读JavaScript prototype lookup chain,这应该澄清一些你的困惑。
答案 1 :(得分:0)
您正在调用静态Date对象而不是它的构造函数。来自MDN,
在非构造函数上下文中调用JavaScript Date(即,没有 new运算符)将返回表示当前时间的字符串。
答案 2 :(得分:0)
真正的MДΓΓБДLL所说的。 仅出于教育目的,您可以创建Date的新实例,因此使用原型中声明的方法。
Date.prototype.now = function() {
return 23;
}
Date = new Date();
document.write(Date.now());