`

Learning Javascript OOP II

阅读更多
  1. 作用域、嵌套函数和闭包
    1. 真正的私有方法和属性:在Javascript中,只有函数才有作用域 。也就是说,在一个函数内部声明的变量在函数外问无法访问。但是定义在这个函数中的变量可以被内嵌在这个函数中的内嵌函数 。所以这样就可以达到私有方法和属性的效果.
      function foo() {
         var i = 2;
      
         // private function
         function bar() {
            i *= 2;
         }
      
         bar();
         return i;
      }
      
      以及
      
      function foo() {
         var i = 2;
      
         // private function
         function bar() {
            i *= 2;
            return i;
         }
      
         return bar();
      }
      var baz = foo(); // baz is now a reference to function bar.
      baz(); // returns 4
      baz(); // returns 8
      baz(); // returns 16
      
      var blat = foo(); // blat is another reference to bar.
      blat(); // return 4
       

  2. 什么时候应该在构造函数里定义方法(特权方法Privileged methods):
    var Persion = function(name, age) {
       var name;
       
       this.setName(nameParam) {
          name = nameParam;
       }
    }
     什么时候应该用prototype方式定义方法:
    var Person = function(name, age) {
       var name;
       var age;
    
       this.getName() {
          return name;
       }
    
       this.getAge() {
          return age;
       }
    
    };
    
    Person.prototype = function() {
       toString : function() {
          return this.getName() + " is " + this.getAge() + " years old."
       }
    }
      prototype定义的方法没法访问到私有变量和方法, 而且prototype定义的方法在内存中只存在一份,而特权方法Privileged methods会在创建多个实例后在内存中存在多份,从而会降低性能。另外私有属性和方法不能被子类重用,所以当要在子类重用方法或属性时,对方法和属性的作用域限制就不能用闭包来实现了。
  3. 一个完整的JS类的例子(采闭包方式实现)
    var Person = (function(){
       
       // const variable(This variable won't be changed, so it's final.)
       var EIGHTEEN = 18;
    
       // private static variable
       var personCount = 0;
    
       // private static method
       function isAdult(age) {
          return age >= EIGHTEEN ? true : false;
       }
    
       // constructor
       return function(nameParam, ageParam) {
          // private instance variable
          var name, age;
    
          // public instance method(Privileged method)
          this.setName = function(nameParam) {
             name = nameParam;
          };
          this.getName = function() {
             return name;
          };
          this.setAge = function(ageParam) {
             if (isAdult(ageParam)) {
                age = ageParam;
             }
             age = EIGHTEEN;
          };
          this.getAge = function() {
             return age;
          };
    
          // init properties or do some about initializing work
          personCount++;
    
          this.setName(nameParam);
          this.setAge(ageParam);
       }
    })();
    
    // public static method for Person class
    Person.doSomething = function() {
       //TODO......
    };
    
    // Create Person instance
    Person handy_wang = new Person("handy.wang", 18);
    handy_wang.setName("Wang-Jiangshan");
    handy_wang.setAge(24);
    Person.doSomething();
     
2
0
分享到:
评论

相关推荐

    Learning PHP, MySQL and JavaScript with jQuery, CSS and HTML5

    这本书《Learning PHP, MySQL and JavaScript with jQuery, CSS and HTML5》是针对初学者介绍几种关键的Web开发语言的入门级教材。在Web开发领域,PHP、MySQL、JavaScript、jQuery、CSS和HTML5是非常重要的技术栈,...

    Javascript.Object.Oriented.Programming.pdf

    JavaScript developers looking to enhance their web developments skills by learning object-oriented programming. What You Will Learn Get acquainted with the basics of JavaScript language constructs ...

    Essential Javascript

    <title>Learning Javascript <p>Hello World! <script type='text/javascript'> // Your script goes here. ``` 将此文件保存为 HTML 文件后,在浏览器中打开即可查看结果。由于 JavaScript 是解释型语言...

    a-tiny-JS-world:对于那些还不熟悉 OOP 和 JS OOP 的人来说,这是一项小任务

    目录学分 关于你这个地方对你有用,如果你了解 JavaScript 基础知识不知道任何 OOP 或至少 JavaScript 特定的 OOP 故事有一个小小的世界,里面住着一只狗、一只猫、一个女人、一个男人,有时还有一个猫女。...

    Learning Object-Oriented Programming(PACKT,2015)

    Learning Object-Oriented Programming is an easy-to-follow guide full of hands-on examples of solutions to common problems with object-oriented code in Python, JavaScript, and C#. It starts by helping ...

    学习oop

    "Learning-oop-master" 文件夹中可能包含了各种 OOP 实例、练习和解决方案,通过这些资源,你可以深入了解 JavaScript 中的面向对象编程,并提升自己的编程技能。实践中,不断尝试创建、继承和封装不同的类,以及...

    Javascript - The Web Warrior Series 6th Edition

    - JavaScript支持原型继承和类继承两种方式实现OOP。 - 类(class)是ES6中引入的新特性,简化了面向对象编程的过程。 4. **实战篇**: - 本书提供了多个实际项目案例,如构建一个简单的网页游戏、实现一个动态网站...

    avaScript.Projects.for.Kids.1785

    Learning JavaScript will help you see the broader picture of web development. This book will take your imagination to new heights by teaching you how to work with JavaScript from scratch. It will ...

    Packt.Learning.Node.js.for.NET.Developers.2016

    - JavaScript 支持多种编程范式,包括 OOP 和 FP。 - **函数式编程:** 使用纯函数和不可变数据结构。 - **面向对象编程:** JavaScript 通过原型链实现了面向对象编程。 **作用域的理解:** - **局部作用域:** ...

    learning.js:与乔纳斯一起学习js

    在JavaScript的世界里,"learning.js:与乔纳斯一起学习js" 这个资源可能是为了帮助初学者或有经验的开发者深化对JavaScript的理解而设计的。JavaScript是一种广泛应用于Web开发的编程语言,它允许动态交互性,是构建...

    Angular 10/9 CookBook-JavaScript开发

    在本食谱示例中,您将学习Angular(用于构建前端Web应用程序...TypeScript是JavaScript的超集,具有强大的OOP抽象和可编译为JavaScript的强类型系统。 使用Angular,您可以使用强大的工具和设计模式来构建小型或大型Web

    madomagiOOP:与动漫魔术女孩一起学习OOP。 (魔法少女で学ぶオブジェクト指向):mage:

    2. `src`目录:存放源代码,包括JavaScript文件,这些文件展示了如何用实际代码实现OOP。 3. `examples`目录:包含各种示例,让你通过实践来学习OOP。 4. `assets`目录:可能存储图片、音频或视频资源,用于增强教程...

    OOP:适用于讲师和其他使用情绪的人的脚本自动化。 自动从Google云端硬盘和本地目录中提取所有文件,并上传正确的标头和链接到Moodle的每个部分

    在这个场景下,可能是使用Python、JavaScript或其他支持OOP的编程语言编写了一个脚本,该脚本能遍历Google云端硬盘和本地文件夹,找出指定类型的文件,然后根据预设规则(如文件名、文件类型等)将它们上传到Moodle...

    learning_platform

    2. **Ruby面向对象编程**:Ruby是面向对象编程(OOP)的语言典范,平台会深入讲解类、对象、继承、封装和多态等核心概念。学习者将学会如何创建自己的类,以及如何利用模块(module)实现代码复用。 3. **Ruby on ...

    typescript-learning

    类是面向对象编程的基础,TypeScript支持ES6中的类语法,允许我们定义类、继承、构造函数以及访问修饰符,提供了更丰富的OOP特性。 5. **模块(Modules)** TypeScript引入了模块系统,可以使用import和export...

    Nestjs-Learning:nestjs学习教程,跟我一起学习nest框架〜

    它使用现代JavaScript或TypeScript(保留与纯JavaScript的兼容性),并结合OOP(面向对象编程),FP(函数式编程)和FRP(函数响应式编程)的元素。 在宽敞,Nest使用了 ,但也提供了与其他各种库的兼容,例如 ,...

    learning_php

    4. **类与对象**:PHP支持面向对象编程(OOP),包括类的定义(`class MyClass { ... }`)、属性(成员变量)和方法(成员函数)。你可以使用`new`关键字实例化对象,并通过`.`操作符调用对象的方法。了解`__...

    learning_java:我第一次尝到java! 基本的东西在这里,没有什么太令人兴奋的

    2. **面向对象编程**:与Ruby和JavaScript不同,Java是一种严格的面向对象编程(OOP)语言。这意味着所有程序都由类和对象组成,每个对象都有其属性和行为。Java支持封装、继承和多态这三大面向对象特性。 3. **...

Global site tag (gtag.js) - Google Analytics