zoukankan      html  css  js  c++  java
  • JavaScript面向对象编程

      作为一门基于对象的语言,JavaScript又不像一门真正的面向对象编程的语言,因为它居然没有类(class)~

    JavaScript类的实现方案

      1.工厂模式

    function createPerson(name, age, job) {
        var o = new Object();
        o.name = name;
        o.age = age;
        o.job = job;
        o.getName = function () {
            return this.name;
        }
        return o;//使用return返回生成的对象实例
    }
    var person = createPerson('Jack', 19, 'SoftWare Engineer');
    

      工厂模式是一种广为人知的设计模式,创建对象交给了一个可以接受参数的方法。

      优点:解决了多次创建对象的繁琐过程。

      缺点:无法识别对象类型,因为创建对象都是使用Object的原生构造函数来完成的。

      2.构造函数模式 

    function Person(name,age,job){
        this.name = name;
        this.age = age;
        this.job = job;
        this.getName = function () {
            return this.name;
        }
    }
    var person1 = new Person('Jack', 19, 'SoftWare Engineer');
    
    var person2 = new Person('Liye', 23, 'Mechanical Engineer');  

      使用自定义的构造函数(与普通函数一样,只是用它来创建对象),定义对象类型(如:Person)的属性和方法。它与工厂方法区别在于:

    • 没有显式地创建对象
    • 直接将属性和方法赋值给this对象;
    • 没有return语句;

          此外,要创建Person的实例,必须使用new关键字,以Person函数为构造函数,传递参数完成对象创建;实际创建经过以下4个过程:

    1. 创建一个对象
    2. 将函数的作用域赋给新对象(因此this指向这个新对象,如:person1)
    3. 执行构造函数的代码
    4. 返回该对象

      上述由Person构造函数生成的两个对象person1与person2都是Person的实例,因此可以使用instanceof判断,并且因为所有对象都继承Object,因此person1 instanceof Object也返回真:

    alert(person1 instanceof Person);//true;
    alert(person2 instanceof Person);//true;
    alert(person1 instanceof Object);//true;
    alert(person1.constructor === person2.constructor);//ture;
    

        

  • 相关阅读:
    实验0 了解和熟悉操作系统一、目的和要求
    读后感
    有穷自动机自动转化
    文法分析
    词法分析随笔
    git操作笔记
    面试题汇总
    MYSQL数据库设计
    Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用
    invalid comparison:java.util.Date and java.lang.String
  • 原文地址:https://www.cnblogs.com/diver-blogs/p/5768851.html
Copyright © 2011-2022 走看看