javascript函数来模拟类,最佳实践?

时间:2011-11-23 13:08:07

标签: javascript class function

我注意到我可以编写类似下面的函数来模拟类。我想知道这是否是最新的方式。任何评论赞赏。感谢

function Apple(type) {
    this.type = type;
    this.color = "red";
    this.getInfo = function () {
        return this.color + ' ' + this.type + ' apple';
    };
}

var apple = new Apple('testapple');
apple.color = 'blue';
console.log(apple.getInfo());

2 个答案:

答案 0 :(得分:7)

您的代码工作正常但效率不高,因为它为每个实例提供了getInfo函数。这可以避免。您可以使用以下模式来模拟JS中的类。

基本模式

要模拟类属性/方法,可以在构造函数上设置属性/方法。

function Apple() {};
Apple.classProperty = some_value;
Apple.classMethod = some_method;

要模拟实例属性,可以在构造函数内部进行设置(就像在代码中一样):

function Apple() {
  this.property = some_instance_value;
};

要模拟实例方法,您可以在Constructor.prototype中设置将在其所有实例之间共享的函数

function Apple() {};
Apple.prototype.instanceMethod = function () {...};

高级模式

如果要设置私有/特权方法,Crockford具有非常有用的模式。

私有方法 - 仅对构造函数可用:

function Constructor(...) {
var that = this;
var membername = value;
function membername(...) {...}

}

特权方法 - 可以访问私有方法,并且可以访问公众:

function Constructor(...) {
this.membername = function (...) {...};
}

答案 1 :(得分:0)

此实现没有错。

JavaScript中有很多模式。请看看。

http://addyosmani.com/resources/essentialjsdesignpatterns/book/

我也发现这个网站非常有帮助

http://bonsaiden.github.com/JavaScript-Garden/