我正在阅读javascript中的Prototypes,我写了2个小js代码,输出完全相同。我只是想知道它们之间有什么区别:
代码1:
String.sam = function() { alert('fine') };
'ok'.sam();
代码2原型:
String.prototype.sam = function() { alert('fine') };
'ok'.sam();
请说明使用代码的不同之处和更好的方法。
由于
答案 0 :(得分:4)
你的第一个例子不起作用。你正在做的是在字符串对象上创建一个静态方法,所以你必须静态地调用它
//OK
String.sam();
//not OK, raises error
'hello'.sam();
在第二个示例中,关键字this
将引用您调用它的字符串实例。所以你可以做类似
String.prototype.sam = function() {
console.log( this.toUpperCase() );
}
'hello'.sam(); // HELLO
这种技术虽然强大但在某些方面令人不悦。它被称为Guerrilla补丁,猴子打孔或类似的东西。 有几个原因被认为是坏事:
答案 1 :(得分:0)
我认为,您的第一个方法仅为此特殊属性添加了alert()方法。如果要创建另一个实例,则必须再次执行相同的操作。使用protoype,你可以更普遍地定义它,这样你就不必再为另一个实例做同样的事了。
也许http://www.javascriptkit.com/javatutors/proto.shtml会帮助您更好地理解它。