javascript - style - स्क्रिप्टिंग भाषा




ऑब्जेक्ट संदर्भ और विरासत को बनाए रखते हुए प्रोटोटाइप जावास्क्रिप्ट को व्यवस्थित करें (2)

आप इसे स्वयं का एक वर्ग Controls कर सकते हैं:

var Controls = function (controllable_object) {
    this.ref = controllable_object;
};
Controls.prototype.next = function () {
    this.ref.foo();
}
// ..

var Carousel = function () {
    this.controls = new Controls(this);
};
// ..

यह आपको Controls के कार्यान्वयन को ओवरराइड करने की अनुमति नहीं देता है। अधिक निर्भरता इंजेक्शन के साथ आपको कुछ पसंद आएगा:

var Controls = function (controllable_object) {
    this.ref = controllable_object;
};
Controls.prototype.next = function () {
    this.ref.foo();
}
// ..

var Carousel = function () {
        this.controllers = [];
    };
Carousel.prototype.addController = function (controller) {
        this.controllers.push(controller);
    };
// ..

var carousel = new Carousel();
carousel.addController(new Controls(carousel));

मैंने जावास्क्रिप्ट प्रोटोटाइप और विरासत का उपयोग कर एक बड़ा आवेदन बनाया है। लेकिन मेरे कोड का आयोजन करने में मुझे एक कठिन समय आ रहा है उदाहरण के लिए मेरे पास एक वर्ग केरोल है जिसमें कई फ़ंक्शन हैं:

Carousel.prototype.next = function () {...}
Carousel.prototype.prev = function () {..}
Carousel.prototype.bindControls = function () {..}

मैं इस तरह से अपना कोड व्यवस्थित करना चाहता हूं:

Carousel.prototype.controls = {
   next: function () { ... } , 
   prev: function() { ... },
   bindControls: function () { .. }
}

लेकिन यह "यह" खो दिया जा रहा है के मूल्य का कारण होगा मैं इसे एक वैश्विक उदाहरण का उपयोग करके ट्रैक कर सकता हूं लेकिन यह समस्या पैदा कर सकता है जब क्लास उदाहरण के लिए विरासत में मिली है तो दूसरी फ़ाइल में मुझे ऐसा कुछ है जो पैरेंट क्लास ओवरराइड करने के लिए है

BigCarousel.prototype.next = function () {...}

मेरी विरासत इस तरह की है:

Function.prototype.inheritsFrom = function (parentClass) {
    if (parentClass.constructor === Function) {
        //Normal Inheritance
        this.prototype              = $.extend(this.prototype , new parentClass);
        this.prototype.constructor  = this;
        this.prototype.parent       = parentClass.prototype;
    }
    else {
        //Pure Virtual Inheritance
        this.prototype = $.extend(this.prototype, parentClass);
        this.prototype.constructor = this;
        this.prototype.parent = parentClass;
    }
    return this;
};

तो मैं कर सकता हूँ:

BigCarousel.inheritsFrom(Carousel)

क्या किसी को पता है कि मैं "इस" मान के आसपास कैसे काम कर सकता हूं?


आप फंक्शन के .bind विधि का उपयोग कर सकते हैं।

जावास्क्रिप्ट फ़ंक्शंस में ऑब्जेक्ट से मिले हैं, इसलिए उनके पास अपने तरीके हैं। उन विधियों में से एक है। बाध्य:

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind

इसके अलावा आप गलत वार कर रहे हैं, कच्चे जावास्क्रिप्ट के साथ सही तरीके से है:

ChildClass= function() {
    ParentClass.apply(this, arguments); //calling parent constructor
    //constructor
};

ChildClass.prototype= new ParentClass();

तो आप अपने निर्माता पर ऐसा कर सकते हैं:

Courossel= function() {
    ParentClass.apply(this, arguments); //calling parent constructor
    this.controls.next.bind(this);
    this.controls.prev.bind(this);
    this.controls.bindControls.bind(this);
}

लेकिन मुझे कहना होगा कि फ्रिट्ज सुझाव बेहतर है, अपने खुद के वर्ग को नियंत्रित करें और अपने कैरोसेल इमेजेंस (इस खोजशब्द) के संदर्भ में कैरोसेल कन्स्ट्रक्टर पर इसका इन्स्तांत करें। बस इसे ".ref" कहते हैं, यह भ्रामक है।








javascript-objects