0

以下の例で、JavaScript のオブジェクトに変数を渡すために使用している手法の名前は何ですか? さらに、なぜ機能しないのですか (コンソール ログに期待どおりに「大」が出力されません)。

var thumbnailBlock = new ThumbnailBlock();
thumbnailBlock.thumbnailSize = "large";


function ThumbnailBlock() {

    this.thumbnailSize;

    console.log("DEBUG");
    console.log(this.thumbnailSize);
}
4

3 に答える 3

4

Willem Mulderの回答から、コードで何が問題になっているのかを説明します。

特定の名前はありません。オブジェクトプロパティを設定するだけです。

最初にThumbnailBlockコンストラクター関数(this.thumbnailSizeをログに記録する)を使用してオブジェクトを作成し、次に.thumbnailSizeを「large」に設定するため、「large」は出力されません。

サイズを関数の引数として渡すことができます。

function ThumbnailBlock(size) {
    this.thumbnailSize = size;
}

var thumbnailBlock = new ThumbnailBlock("large");

console.log(thumbnailBlock.thumbnailSize);

また、そのページのコンストラクターパターンやその他の素敵なパターンもご覧ください。また、無料の本EloquentJavaScriptのOOPに関する章もお勧めします。

于 2012-07-10T11:46:45.637 に答える
2

特定の名前はありません。オブジェクトのプロパティを設定するだけです。

最初に ThumbnailBlock コンストラクター関数 (this.thumbnailSize を記録する場所) を使用してオブジェクトを作成し、次に.thumbnailSize を「大」に設定するため、「大」は出力されません。

于 2012-07-10T11:46:06.963 に答える
1

適切な答えはすでに与えられています。オブジェクトが封印または凍結されている場合、動的プロパティの追加は機能しないという記録を指摘したいと思います。

function ThumbnailBlock(size) {
    Object.seal(this);
}

var thumbnailBlock = new ThumbnailBlock("large");
thumbnailBlock.thumbnailSize = 10;

console.log(thumbnailBlock.thumbnailSize); // undefined

厳密モードでは、代わりに例外が発生します。

于 2012-07-10T14:04:41.830 に答える