2

Crockford によって一般的に推進されているように、プライベート/パブリック アクセス制限のあるオブジェクトを作成しています。たとえば、次のようなものがあります。

var foo = (function() {
    var myPrivateVariable = "whatever";
    return {
        myPublicFunction:function(str){
                    return str;
                }
    }
}());

次のような電話をかけると

myPublicFunction();

クロージャーは、間違った数の引数で関数を呼び出していることを教えてくれるはずです。myPublicFunction の JavaDoc コメントで Closure を支援しようとしました。

var foo = (function() {
    var myPrivateVariable = "whatever";
    return {
        /**
         * @param {string} str
         */
        myPublicFunction:function(str){
                    return str;
                }
    }
}());

foo.myPublicFunction();

それでも、文句はありません。私は foo に対してさまざまな形式の JavaDoc を試しましたが、機能する唯一のものは、それをレコード型として文書化することでした:

/**
 * @type {{myPublicFunction:function(string):string}}
 */
var foo = (function() {
    var myPrivateVariable = "whatever";
    return {
        /**
         * @param {string} str
         */
        myPublicFunction:function(str){
                    return str;
                }
    }
}());

foo.myPublicFunction();

これは機能しましたが、コンパイラは、myPublic オブジェクト関数が実際に JavaDoc のレコード フィールドに記載されている署名と一致することを強制しようとしませんでした。したがって、これらの返されたオブジェクトにすべての関数を確実にドキュメント化し、ドキュメント内の署名を実際に返すものと一致させるようにしている限り、これは機能します。これを強制するためのより良い方法がありませんか?

ありがとう!

4

2 に答える 2

1

コンパイラがしわを滑らかにするので、実際には疑似古典的継承の使用を検討することをお勧めします。Michael Bolinには、この問題について説明した詳細な記事があります。

http://bolinfest.com/javascript/inheritance.php

于 2010-10-28T19:03:10.417 に答える