zoukankan      html  css  js  c++  java
  • 面向对象的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)基本的面向对象:数据和操作数据的函数都封装得很好*/
  • 相关阅读:
    MVVM模式和在WPF中的实现(一)MVVM模式简介
    C#中实现并发的几种方法的性能测试
    搞笑:儿子的日记,叔叔妈妈
    MSN头像中小黄鸭子是什么?
    某人分析的70后,80后,90后
    有趣的纹身
    百度首页人物logo第一期:许三多
    关于微软Windows未来的一点畅想
    我把最难的21个汉字写进一篇文章
    百度还可以这样玩!
  • 原文地址:https://www.cnblogs.com/feile/p/5400444.html
Copyright © 2011-2022 走看看