0

init 関数を持つオブジェクトの複数のバージョンを作成しようとしています。JavaScript の「new」関数を使用してみましたが、この場合は機能せず、関数ではないことがコンソールに通知されます。私がやろうとしていることのより明確な説明については、コードを参照してください。このコードが項目 1 ではなく項目 2 を警告する理由は理解していますが、正しい動作を取得する方法がわかりません。

var myApp = {
menu: {
        init: function (name) {
            this.name = name;
        },
        alertName: function () {
            alert(this.name);
        }
    }
}

$(document).ready(function () {
    var first = myApp.menu;
    var second = myApp.menu;
    first.init('item one');
    second.init('item two');
    first.alertName();
}); 
4

5 に答える 5

4

JavaScript のコンストラクター関数を使用して、newさまざまなオブジェクトをインスタンス化するために呼び出すことができます。

var myApp = {
    menu: function(name){
        // if menu is called as a constructor function, `this` will refer
        // to the object being built
        this.name = name;
    }
}

myApp.menu.prototype.alertName = function(){
    alert(this.name);
}

$(document).ready(function () {
    var first = new myApp.menu('item one');
    var second = new myApp.menu('item two');
    first.alertName();
});

フィドル

于 2013-10-08T08:48:40.487 に答える
0

必要に応じて独自に実装できますnew。これは機能するはずです。

var myApp = {
menu: {
        init: function (name) {
            this.name = name;
        },
        alertName: function () {
            alert(this.name);
        },
        new: function () {
            var func = function () {}
            func.prototype = this
            return new func;
        }
    }
}

$(document).ready(function () {
    var first = myApp.menu.new();
    var second = myApp.menu.new();
    first.init('item one');
    second.init('item two');
    first.alertName();
}); 
于 2013-10-08T08:59:34.513 に答える