我注意到我可以编写类似下面的函数来模拟类。我想知道这是否是最新的方式。任何评论赞赏。感谢
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());
答案 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/
我也发现这个网站非常有帮助