抽象 Abstraction

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了,现在这个对象的公共接口变得简单并且容易操作了,这样也避免了后续的其他问题。

你可能感兴趣的:(抽象 Abstraction)