0

質問は簡単です。PHP のように魔法の関数__construct()がありますが、javascript で使用できる関連する関数やハックはありますか?

例:

function setLength() {
    /* Some work */
}

var a = new Object();
b = new String("Hello");
//Is there anyway the function setLength() will automatically be fired when an Object or String... created?

あなたの答えを楽しみにしています。助けてくれてありがとう。

[バツ]

4

3 に答える 3

2

特にサードパーティのライブラリを使用している場合は、過負荷を試みるStringのは悪い考えです。同じことがaugmentingにも当てはまりObjectます。

ただし、これを行う方法は次のとおりですが、お勧めしません..

var _String = String;

window.String = function() {
        setLength();
        return new _String(arguments[0]);
}

これは、プリミティブ文字列を作成するときにも呼び出されないことは明らかです。

jsFiddle .


新しいオブジェクトを返し、関数を呼び出す文字列ファクトリ関数を使用できます。String

var stringFactory = function(chars) {
    setLength();
    return new String(chars);  
}

これにはいくつかの利点があり、主にStringコンストラクターがオーバーロードされません。

于 2011-12-12T08:19:04.447 に答える
1

このようなことを行うだけで、独自のオブジェクトを作成できます。関数はコンストラクターとして機能します。

$(document).ready(function(){

    var instance = new object('test123');

    alert('Instance: '+instance.len);

    function object(var1){
        this.var1 = var1;

        this.len = this.var1.length;
    }
});
于 2011-12-12T08:27:38.220 に答える
0

オーバーライドstring.prototype.constructorして、文字列コンストラクターobject.prototype.constructorの既定の機能を変更したり、オブジェクト コンストラクターの既定の機能を変更したりできます。

ただし、JavaScript のコア クラスのデフォルト機能をオーバーライドすることは、悪い習慣であると広く考えられており、最終目標を達成するためのより良い方法がある可能性があります。 これを行うことにした場合は、オーバーライドされた関数を参照する関数で関数をオーバーライドすることについて、次の SO 投稿を読むことも役立つ場合があります: 元の関数を参照しながら JavaScript 関数をオーバーライドする

jsFiddleをいじってから、いくつかの調査を行った後。私は実際に間違っていることがわかりました。私が提案したように、文字列プリミティブは不変であるため、コンストラクターをオーバーライドすることはできません。詳細については、文字列プロトタイプの変更自体を確認してください。

于 2011-12-12T08:22:16.863 に答える