निजी / संरक्षित गुण और विधियों को परिभाषित करने के प्रोटोटाइप के Class.create का उपयोग करना

वोट
1

वहाँ जावास्क्रिप्ट में निजी और संरक्षित गुण और विधियों को परिभाषित करने के लिए एक अच्छा तरीका है सामान्यीकृत साइट पर यहाँ । हालांकि, प्रोटोटाइप (1.6.0) के वर्तमान संस्करण में एक अंतर्निहित तरीका अपने माध्यम से उन्हें परिभाषित करने के लिए नहीं है Class.create()वाक्य रचना।

मैं उत्सुक क्या सर्वोत्तम प्रथाओं हैं जब डेवलपर्स जब प्रोटोटाइप का उपयोग कर निजी और संरक्षित गुण और विधियों को परिभाषित करना चाहते हूँ। वहाँ सामान्य की तुलना में एक बेहतर तरीका है?

21/05/2009 को 22:03
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


3 जवाब

वोट
2

वहाँ एक चर्चा है यहाँ प्रोटोटाइप का प्रकाश स्तंभ में पता चलता है कि बताते हैं कि तुम क्यों प्रोटोटाइप के Class.create साथ इस आशय नहीं मिल सकता है।

22/05/2009 को 04:29
का स्रोत उपयोगकर्ता

वोट
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();
   }
});

यहाँ इस विषय पर डगलस Crockford सिद्धांत है।

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

22/05/2009 को 07:54
का स्रोत उपयोगकर्ता

वोट
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
18/02/2016 को 21:52
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more