16 三月, 2009 22:06
看到有人問如何繼承javascript內建的String物件,於是動手試了一下。果然,不是想像中的簡單。
粗淺的想法是:
function NewType() {
}
NewType.prototype = new String;
但是這樣沒辦法使用到繼承的String內建的方法...
看了一下ECMA-262,裡面關於String Native Object的定義中,所有native function的動作第一步都是做ToString。所以試著調整NewType讓他盡量相容看看:
function NewType(str) {
this._str = str;
this.toString = function() {
if(this._str && typeof(this._str)==="string") {
return this._str||"";
} else {
throw("Type Error.");
}
}
}
NewType.prototype = new String;
恩...測試了一下,如果使用運算子"+"會出現呼叫valueOf()的錯誤,所以另外加了這個函數的實作,同時也試著給NewType加上一個trim方法,並做測試:
function NewType(str) {
this._str = str;
this.toString = function() {
return this.valueOf();
}
this.valueOf = function() {
if(this._str && typeof(this._str)==="string") {
return this._str||"";
} else {
throw("Type Error.");
}
}
}
NewType.prototype = new String;
NewType.prototype.trim = function() {
return this.replace(/^\s+|\s+$/, '');
};
var b = new NewType("a new day is coming \nfrom now on ");
alert(b);
alert(b+"|");
alert(b.indexOf("co"));
alert(b.trim()+ "|");
alert(b.toUpperCase());
alert(b.charAt(3));
ok,這樣就不會出現錯誤了,而且在ff3、ie7、safari、google chrome都可以正確執行。
推文( 0 )
随着北京翻译公司经济的高速发展,中国企业邮箱出现了巨大的注册外资公司。中国的外资公司注册有近3000家,注册英国公司从业人员至少达100万,但专业英国公司注册人员却不足10万人。