[英]What is the best way to write object methods in JavaScript?
OOP建议仅公开您希望用户能够访问的变量和方法。 我一直在为我的对象使用公共方法声明(即原型)。
DrawShape = function() {
}
DrawShape.prototype.circle = function() {
// draw logic here
}
DrawShape.prototype.square = function() {
// draw logic here
}
该方法似乎是最有效的,因为不会在实例化实例时每次都重写该方法。 但是我发现要创建好的DRY,我必须创建模块化代码,这些方法只能用于其他方法(即私有方法)。
DrawShape = function() {
}
DrawShape.prototype.circle = function() {
var colour = this.setColour();
// draw logic here
}
DrawShape.prototype.square = function() {
var colour = this.setColour();
// draw logic here
}
DrawShape.prototype.setColour = function() {
return "blue";
}
在这里,我创建了一个名为setColour的方法,该方法只能由其他方法运行。 问题在于该方法是公共的,任何人都可以调用。
我可以将方法移到对象构造函数中...但是,这意味着我不再节省内存(即,每次实例化实例时都将重写该方法),这也意味着我不得不移动所有其他方法进入构造函数。
在创建对象方面,JavaScript的最佳实践是什么?
IIFE(立即调用函数表达式)的功能:
DrawShape = function() {
}
(function () {
DrawShape.prototype.circle = function() {
var colour = setColour();
// draw logic here
console.log(typeof setColour); // function
}
DrawShape.prototype.square = function() {
var colour = setColour();
// draw logic here
console.log(typeof setColour); // function
}
function setColour() {
return "blue";
}
console.log(typeof setColour); // function
})();
console.log(typeof setColour); // undefined
需要注意的是,如果this
是在使用setColour
功能,你必须与当前值来调用它this
,因为你不能合理地绑定this
特定对象(据我所知,甚至ES6不会使这更容易):
setColour.call(this);
无论如何,那些“ u”一定会伤害美国人的眼睛。
我更喜欢这样:
DrawShape = function() {
var circle = function() {
var colour = setColour();
// draw logic here
};
var square = function() {
var colour = setColour();
// draw logic here
};
var setColour = setColour() {
return "blue";
};
return {
circle: circle,
square: square
};
};
我觉得看起来不错。 而且可读性也很好。
编辑 :
根据评论,我们可以将其重写如下:
DrawShape = function() {
this.circle = function() {
var colour = setColour();
// draw logic here
};
this.square = function() {
var colour = setColour();
// draw logic here
};
var setColour = setColour() {
return "blue";
};
return this;
};
我真的不喜欢IIFC。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.