This page looks plain and unstyled because you're using a non-standard compliant browser. To see it in its best form, please visit upgrade to a browser that supports web standards. It's free and painless.

Fillano's Learning Notes 會員登入 會員註冊

« 上一篇 | 下一篇 »

看到有人問如何繼承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都可以正確執行。

  1. Re: 繼承String物件 [回覆]

    随着北京翻译公司经济的高速发展,中国企业邮箱出现了巨大的注册外资公司。中国的外资公司注册有近3000家,注册英国公司从业人员至少达100万,但专业英国公司注册人员却不足10万人。

    fefe 回應於 08 元月, 2010 13:24

  2. Re: 繼承String物件 [回覆]

    虽然冲浪网,以取得相关的testing king个项目的数据i来到这里,发现这个网站的不同之一...我在这里找到有用的信息...当然,还有很多不同的职位,在这里...而这也是一次在我看来不同之一!

    nomzz 回應於 20 二月, 2010 12:50

發表回應

 暱稱 (必填)

 標題

 個人網頁

 電子郵件

authimage 
 認證碼 (必填)