1

Javascript でプライベートおよび保護されたプロパティとメソッドを定義するための優れた一般化された方法が、こちらのサイトにありますClass.create()ただし、現在のバージョンの Prototype (1.6.0) には、構文を使用してそれらを定義する方法が組み込まれていません。

Prototype を使用するときに、開発者がプライベートおよび保護されたプロパティとメソッドを定義したい場合のベスト プラクティスは何かに興味があります。一般的な方法よりも良い方法はありますか?

4

3 に答える 3

2

Prototype の Lighthouse には、Prototype の Class.create でこの効果を得ることができない理由を説明する議論があります。

于 2009-05-22T05:29:18.017 に答える
1

できることは、プロトタイプのコンストラクター関数(初期化)でローカル変数を使用してから、この変数にアクセスしてパブリックメソッドに公開するクロージャーを作成することです。

コード例は次のとおりです。

// properties are directly passed to `create` method
var Person = Class.create({
   initialize: function(name) {
      // Protected variables
      var _myProtectedMember = 'just a test';

      this.getProtectedMember = function() {
         return _myProtectedMember;
      }

      this.name = name;
   },
   say: function(message) {
      return this.name + ': ' + message + this.getProtectedMember();
   }
});

これがこの主題に関するダグラス・クロックフォードの理論です。

http://www.crockford.com/javascript/private.html

于 2009-05-22T08:54:50.130 に答える
0

重要なのは、以下の例のように、パブリック メソッドをクロージャーとして追加することです。

 Bird = Class.create (Abstract,(function () {
    var string = "...and I have wings"; //private instance member
    var secret = function () {
        return string;
    } //private instance method
    return {
        initialize: function (name) {
            this.name = name;
        }, //constructor method
        say: function (message) {
            return this.name + " says: " + message + secret();
        } //public method
    }
})());

Owl = Class.create (Bird, {
    say: function ($super, message) {
        return $super(message) + "...tweet";
    } //public method
})

var bird = new Bird("Robin"); //instantiate
console.log(bird.say("tweet")); //public method call

var owl = new Owl("Barnie"); //instantiate
console.log(owl.say("hoot")); //public method call inherit & add
于 2016-02-18T23:52:29.953 に答える