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