JavaScript - String.newProperty vs. String.prototype.newProp
JavaScript - String.newProperty vs. String.prototype.newProperty?
在http://jsfiddle.net/javascriptenlightenment/QvbDw/,作者用两个新属性扩充了内置的String对象构造函数——一个数组属性和一个函数属性。
我注意到,对于新的数组属性,他这样做了:
String.newArrayProperty = [];
// Q1: Why not String.prototype.newArrayProperty = []; ?
但对于新的函数属性,他这样做了:
String.prototype.newFunctionProperty = function() {...};
// Q2: Why not String.newFunctionProperty = function() {...}; ?
String.newProperty和String.prototype.newProperty之间有什么区别?
String.newProperty
为String
本机函数添加了一个新属性,但该属性不会被它生成的字符串继承,而String.prototype.newProperty
将该新属性添加到它生成的所有字符串中,但不会添加到本机函数本身。
String.property
只是将propery
到String
类作为对象进行广告,String.prototype.property
将此属性添加到该类的所有实例中。
function F() {
}
F.p1 = function () { console.log('F.p1'); } ;
F.prototype.p2 = function () { console.log('F.prototype.p2'); } ;
F.p1(); // 'F.p1'
F.p2(); // error
new F().p1(); // error
new F().p2(); // 'F.prototype.p2'
另请查看:
- JavaScript.protype是如何工作的
- http://www.w3schools.com/jsref/jsref_prototype_math.asp
- https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/prototype
String
原型的方法可以应用于String的所有实例。分配给String
构造函数的方法必须以字符串为参数的静态方法调用。如果方法在原型中,则在原型中this
引用字符串实例。
因此:
String.prototype.insertLineNr = function(nr){return (nr||1) + ': ' +this;};
// ^instance
String.insertLineNo = function(str,nr){return (nr||1) + ': ' +str;};
var str = 'Some line to be numbered';
//apply to instance
console.log(str.insertLineNr(5); //=> '5: Some line to be numbered'
//can't apply direct String method to instance
console.log(str.insertLineNo(str,5)); //=> TypeError
//Run String method
console.log(String.insertLineNo(str,5); //=> '5: Some line to be numbered'
如果方法名称相等,则可以两全其美:
function insrtNr(str,nr){ return (nr||1) + ': ' + str || this;};
String.insertLineNr = insrtNr;
String.prototype.insertLineNr = insrtNr;
相关文章:
- JavaScript - String.newProperty vs. String.prototype.newProp
- 如何将参数应用于String.prototype.format函数
- 将JavaScript代码迁移到具有String.prototype扩展名的node.js模块
- 为什么在修改String.prototype后创建jQuery插件时出现TypeError
- 我可以在String.prototype中添加一个额外的变量吗
- 为什么 String.prototype.split 返回完整的字符串
- 在 String.prototype.rereplace 使用的字符串中转义美元符号的更好方法
- Javascript 中 String.prototype.search() 中的方括号
- 为什么 String.prototype 中的“this”指的是对象类型,而不是字符串类型
- 基于 REGEXP 的 string.prototype.split 插入故障
- String.prototype.tokenize = tokenize;
- string.prototype.search('$') 在每个字符串上返回正 int
- 为什么String.prototype会记录它's对象类似于标准对象,而Array.prototype记录它
- JS: String.prototype.toUnderscore()
- 为什么“String.prototype ={}“;赢得了# 39;t工作
- 为什么' lodash.map(['A'], String.prototype.toLowerCase.
- Javascript - V8中添加到String.prototype的函数性能很差
- 在传递数组时,调用和应用String.prototype.toUppercase都会产生相同的结果
- 部分应用String.prototype…javascript中的下划线
- 为什么String.prototype.replace remove "$'"从我的绳子上