OOP的抽象规则:隐藏细节,只暴露必须
function Circle(radius) {
this.radius = radius;
this.defaultLocation = { x: 0,y: 0};
this.computeOptimumLocation = function(factor) {
//...
}
this.draw = function() {
this.computeOptimumLocation(0.1);
console.log('draw');
};
}
const circle = new Circle(10);
circle.draw();
在如上代码中,我们想要隐藏起来该怎么做呢。
先思考一下,如果我们在函数中声明一个本地变量会怎么样:
function Circle(radius) {
let color = 'red';
this.radius = radius;
...
}
它会成为对象的一部分吗?当然不会,因为我们没把它声明为一个属性,没有声明为'this.color = color;',所以这只是这个函数的内部变量,当我离开这个函数的时候,这个变量就离开了作用域,也就死掉了。使用这种技巧,可以轻易隐藏某些成员。
function Circle(radius) {
this.radius = radius;
let defaultLocation = { x: 0,y: 0};
let computeOptimumLocation = function(factor) {
//...
}
this.draw = function() {
computeOptimumLocation(0.1);
console.log('draw');
};
}
const circle = new Circle(10);
circle.draw();
这样一来,当你访问circle的成员,会发现只有draw和radius了,现在这个对象的公共接口变得简单并且容易操作了,这样也避免了后续的其他问题。
网友评论