javascript:创建课程的最佳方式

时间:2017-02-10 20:50:07

标签: javascript class

我一直在创建具有以下结构的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"});

2 个答案:

答案 0 :(得分: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'
});

答案 1 :(得分: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'});