2

そこで、Baranovskiy 氏が基本的に API を使用するためにオペレーターを使用する必要はないと言っているこの記事に出くわしました。このコード行でのインスタンスを作成できるこの基本的な例を作成newしましcolorBoxvar box = new colorBox(node, options);

new演算子を使用せずに、例にあるものをどのように実装できますか?

JS:

var colorBox = function(node, options) {
    this.setSize = function(){
        node.style.width = options.width + 'px';
        node.style.height = options.height + 'px';
    }
    this.setColor = function(color){
        node.style.backgroundColor = color || options.color;
    }
    this.setSize();
    this.setColor();

}

var node = document.getElementById('thing1');
var options = {
    color: 'red',
    width: 200,
    height: 200
}

var box = new colorBox(node, options);

setTimeout(function(){
    box.setColor('blue');
}, 2000);
4

3 に答える 3

5

まず、私はこの記事に同意しません。これnewは、コードを記述する完全に合理的な方法であり、他のオブジェクト指向言語と同様に、「クラス」のインスタンスを作成していることを明確にしていると思います。

しかし...

この回答の2番目のアプローチを見てください。これは、呼び出し元がオフになった場合に新しいインスタンスを返す関数を作成する方法を示していますnew( this「クラス」のインスタンスではない場合、呼び出し元はオフnewになり、thisおそらくグローバル ウィンドウ)。newこれは、毎回安全に新しいインスタンスを返しながら、ユーザーが入力する必要がない 1 つの方法です。

var colorBox = function(node, options) {
    if (!(this instanceof colorBox))
        return new colorBox(node, options);

    // do the rest of your constructor stuff
};
于 2013-07-25T19:42:15.013 に答える
3

new必要な内部関数のすべての使用をラップnewします。そうすれば、API のユーザーは使用する必要がなくなります。操作newの結果を返す関数を呼び出すだけです。new

function makeColorBox(node, options) {
    return new colorBox(node, options);
}

newとはいえ、個人的には、API を設計する際に の使用を要求することは大したことではないと思います。

とはいえ他の理由で避けnewて代わりに使用したい場合もありますObject.create

于 2013-07-25T19:42:41.100 に答える
0

完全になしのソリューションは次のnewようになります。

function colorBox(node, options) {
    var box = {
        setSize: function(){
            node.style.width = options.width + 'px';
            node.style.height = options.height + 'px';
        },
        setColor: function(color){
            node.style.backgroundColor = color || options.color;
        }
    };
    box.setSize();
    box.setColor();
    return box;
}

ここで、返されるオブジェクトは中括弧を使用して作成されますbox = { .... }

于 2013-07-25T19:46:28.747 に答える