面向对象的JS

原型(prototype):所有的JS对象都可以通过其原型来扩展,并且这个功能允许创建自定义类。

    /*     var answer = 0;//代码味太浓,不在局部作用域意味着可以在程序的任何部分被修改
     function addNumbers(num1, num2) {
     answer = num1 + num2;
     }
     //每个函数都是孤立的存在于全局作用域内,污染了全局作用域
     function subtractNumbers(num1, num2) {
     answer = num1 - num2;
     }
     function multiplyNUmbers(num1, num2) {
     answer = num1 * num2;
     }
     function divideNumbers(num1, num2) {
     if (num2 != 0) {
     answer = num1 / num2;
     } else {
     answer = 0;
     }
     }
     addNumbers(1, 2);
     alert(answer);
     subtractNumbers(1, 2);
     alert(answer);
     multiplyNUmbers(1, 2);
     alert(answer);
     divideNumbers(1, 2);
     alert(answer); */

    function NumberFunctions() {//面向对象,有良好的结构,便于理解
        var answer = 0;
    }
    NumberFunctions.prototype.addNumbers = function(num1, num2) {
        this.answer = num1 + num2;
    }
    NumberFunctions.prototype.subtractNumbers = function(num1, num2) {
        this.answer = num1 - num2;
    }
    NumberFunctions.prototype.multiplyNUmbers = function(num1, num2) {
        this.answer = num1 * num2;
    }
    NumberFunctions.prototype.divideNumbers = function(num1, num2) {
        if (num2 != 0) {
            this.answer = num1 / num2;
        } else {
            this.answer = 0;
        }
    }
    NumberFunctions.prototype.toString = function() {//创建的对象自动调用该方法
        return this.answer;
    }
    var nf = new NumberFunctions();
    nf.addNumbers(2, 1);
    alert(nf);//nf自动调用了toString()方法
    nf.subtractNumbers(10, 3);
    alert(nf);
    nf.multiplyNUmbers(4, 5);
    alert(nf);
    nf.divideNumbers(12, 6);
    alert(nf);
    /* 其优点如下:
    1)没有对全局作用域的污染,因为有NumberFunctions函数;
    2)所有函数实际上都是NumberFunctions类的成员,因此构造了一个清晰的关系;
    3)基本的面向对象:数据和操作数据的函数都封装得很好*/

 

posted @ 2016-04-17 10:35  绯乐  阅读(122)  评论(0编辑  收藏  举报