我在javascript中读取原型,我写了2个输出完全相同的小js代码。我只是想知道它们之间有什么区别:Javascript对象原型
代码1:
String.sam = function() { alert('fine') };
'ok'.sam();
代码2原型:
String.prototype.sam = function() { alert('fine') };
'ok'.sam();
请澄清的差异,更好的办法使用代码。
谢谢
我在javascript中读取原型,我写了2个输出完全相同的小js代码。我只是想知道它们之间有什么区别:Javascript对象原型
代码1:
String.sam = function() { alert('fine') };
'ok'.sam();
代码2原型:
String.prototype.sam = function() { alert('fine') };
'ok'.sam();
请澄清的差异,更好的办法使用代码。
谢谢
你的第一个例子不起作用。你在做什么是创建字符串对象的静态方法,所以你必须静态调用它
//OK
String.sam();
//not OK, raises error
'hello'.sam();
在第二个例子中,关键字this
将把你怎么称呼它在弦上的实例。所以你可以做点像
String.prototype.sam = function() {
console.log(this.toUpperCase());
}
'hello'.sam(); // HELLO
这种技术虽然强大,但在某些方面却令人f目结舌。它被称为游击队补丁,猴子拳击或类似的东西。 有它被认为是不好的几个原因:
我想,你的第一个方法只用于此特殊属性警报()方法添加。如果你想创建另一个实例,你必须再次做同样的事情。使用原型可以更一般地定义它,因此您不必为另一个实例再次执行相同的操作。
也许http://www.javascriptkit.com/javatutors/proto.shtml会帮助你更好地理解它。
自从你提到了所有涉及的陷阱之后,你能否在第二个例子中评论一个更好的选择?我试图把我的头围绕原型,并且很好奇。 – Chris 2011-05-27 23:17:47