• 面向对象的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)基本的面向对象:数据和操作数据的函数都封装得很好*/
  • 相关阅读:
    SDN大作业
    第06组 Beta版本演示
    SqlServer 将多行字段合并成单行
    C# MD5加密字符串
    Request.IsAjaxRequest()总是返回false
    Mybatis 语句包含单引号的写法
    idea每次启动maven项目都貌似读不到配置
    idea下springboot项目配置文件application.properties不生效的问题
    Ubuntu 设置时区
    SpringBoot 使用MyBatis
  • 原文地址:https://www.cnblogs.com/feile/p/5400444.html
Copyright © 2020-2023  润新知