0

無名関数を変数として呼び出すことができると読みました。しかし、私はそれをやろうとしており、それに加えて、そのプロパティとメソッドにアクセスしたいと考えています。これが私のコードです

var cooking = function(){
        this.dessert = "Ice Cream";
        this.numberOfPortions = 20;
        this.doubleLunch = function(){this.numberOfPortions = 40;
            document.write(this.numberOfPortions);};
        };

document.write(cooking.dessert);

しかし、私は何も得ません。私が間違っていることを教えてもらえますか?ありがとう

4

2 に答える 2

1

this関数がコンストラクターとして呼び出されたときに、それ自体を参照します。これは、すぐに呼び出される関数式 (IIFE) を使用して行うことができます。

var cooking = (function () {
    return new function () {
        this.dessert = "Ice Cream";
        this.numberOfPortions = 20;
        this.doubleLunch = function () {
            this.numberOfPortions = 40;
            document.write(this.numberOfPortions);
        };
    }
})();

document.write(cooking.dessert);

デモ: http://jsfiddle.net/fk4uydLc/1/

ただし、プレーン オールド JavaScript オブジェクト (POJO) を使用して同じ結果を得ることができます。

var cooking = (function () {
    var obj = {};

    obj.dessert = "Ice Cream";
    obj.numberOfPortions = 20;
    obj.doubleLunch = function () {
        obj.numberOfPortions = 40;
        document.write(obj.numberOfPortions);
    };

    return obj;
})();

document.write(cooking.dessert);

デモ: http://jsfiddle.net/vmthv1dm/1/

コンストラクターを複数回使用する予定がある場合は、@Quentin が言及したアプローチが適しています。

function Cooking() {
    this.dessert = "Ice Cream";
    this.numberOfPortions = 20;
    this.doubleLunch = function () {
        this.numberOfPortions = 40;
        document.write(this.numberOfPortions);
    };
}

var cooking = new Cooking();

document.write(cooking.dessert);

デモ: http://jsfiddle.net/jsd3j46t/1/

于 2015-10-07T23:03:51.983 に答える
1

cooking関数です。それを呼び出すと、何であれ、いくつかのプロパティが定義されますthis

この構造は、コンストラクター関数として使用することを意図していることを意味するため、newキーワードを使用してそのインスタンスを作成します。

その後、インスタンスを操作できます。

var meal = new cooking();
document.write(meal.dessert);

注意: 慣例により、コンストラクター関数 (およびコンストラクター関数のみ) は最初の文字を大文字にして名前を付ける必要があるため、Cooking に名前を変更する必要があります。

于 2015-10-07T22:51:54.420 に答える