我打算构造一个自己的 XString 对象,用来替代内置的 String。
var MyString = function(arg) {
this.length = arg.length;
}
var XString = function(gender) {
MyString.apply(this, arguments);
}
XString.prototype = new MyString('xxx');
XString.prototype.constructor = XString; // fix constructor property
var foo = new XString('male');
console.log(foo.length); // 4
这是没有问题的。 如果把 MyString 换成 String 就会出问题!
var XString = function(gender) {
String.apply(this, arguments);
}
XString.prototype = new String('xxx');
XString.prototype.constructor = XString; // fix constructor property
var foo = new XString('male');
console.log(foo.length); // 0
6 回复
String.prototype.length is not generic 因为xx.length,xx.charAt,xx.indexOf都属于String.prototype.length,当你console.log(String.prototype)返回的是一个{},这代码这些原型方法是最终的,不能被自定义的类所继承