美文网首页
抽象 Abstraction

抽象 Abstraction

作者: 灯火葳蕤234 | 来源:发表于2019-04-15 18:13 被阅读0次

    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

          本文链接:https://www.haomeiwen.com/subject/jwtpwqtx.html