2017-02-10 3 views
0

Я создавал объекты класса javascript со структурой ниже. Есть ли лучший способ достичь этого?javascript: Лучший способ создать класс

function MyClass(config) 
{ 
    this.init(config); 
} 

MyClass.prototype = 
{ 
    that:this, 
    config:null, 

    init:function(config) 
    { 
     this.config = config; 
     this.blah(); 
    }, 

    blah:function() 
    { 
     if(this.config.blah) 
     { 
      console.log(this.config.blah) 
     } 
    } 
} 

new MyClass({blah:"helloWorld"}); 
+4

"Лучше" всегда спорно. Я действительно думаю, что это работа, которую вы ставите 'that' и' config' прямо на прототип, а не только на сами экземпляры. Вы можете сделать пример использования синтаксиса ['class'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes) в браузерах, которые его поддерживают. На самом деле, это то, что лучше всего подходит для вас. –

ответ

1

Я лично предпочитаю иметь все содержимое класса в корпусе.

that не будет иметь MyClass экземпляр, как установлено в вашем примере.

var MyClass = (function() { 

    var MyClass = function (config) { 

     // Optional check whether the class was accessed using new 
     if (!(this instanceof MyClass)) 
      throw new Error('You must create the instance using the keyword new'); 

     // Don't add it to the prototype as it is unique to the instance 
     this.config = config; 

     this.blah(); 
    }; 

    MyClass.prototype = { 

     blah: function() { 

      if (this.config.blah) 
       console.log(this.config.blah); 
     } 
    }; 

    return MyClass; 

})(); 

// That has the instance now 
var that = new MyClass ({ 
    blah: 'helloWorld' 
}); 

Если вы можете использовать ES6, чем вы могли бы попробовать:

class MyClass { 

    constructor (config) { 

     // Don't add it to the prototype as it is unique to the instance 
     this.config = config; 

     this.blah(); 
    } 

    get config() { 
     return this._config; 
    } 

    set config (value) { 
     this._config = value; 
    } 

    blah() { 

     if (this.config.blah) 
      console.log(this.config.blah); 
    } 
} 

let that = new MyClass({ 
    blah: 'helloWorld' 
}); 
+0

Это руководство, которое я искал, – K3NN3TH

0
function MyClass(config) { 
    // Define any Class methods, private or exposed. 
    var blah = function() { 
    if (this.config.blah) { console.log(this.config.blah); } 
    } 

    // Set your class properties. 
    this.config = config; 

    // Invoke any of the functions defined above that should be run on 
    // init, using .apply(this) for logical scoping. 
    blah.apply(this); 

    // Expose any props or methods that you want to. 
    return { 
    config: config, 
    blah: blah 
    }; 
} 

new MyClass({blah: 'blah'});