• 面向对象的程序设计(一)创建对象的各种方法


    //1、创建对象
    //缺点:创建很多个对象的时候会产生大量的代码
    var person = new Object();
    person.name = "Nicholas";
    person.age = 24;
    person.job = "码农";
    
    person.sayName = function () {
        alert(this.name);
    }
    
    //2、工厂模式
    //通过接收参数来构建一个包含所有必要信息的对象,节省了很多代码
    //缺点,没有解决对象识别的问题(对象的类型)
    function creatPerson(name, age, job) {
        var o = new Object();
        o.name = name;
        o.age = age;
        o.job = job;
    
        o.sayName = function () {
            alert(this.name);
        }
        return o;
    }
    
    var person1 = creatPerson("Nicholas", 24, "码农");
    var person2 = creatPerson("Greg", 24, "码农");
    
    person1.sayName();//Nicholas
    person2.sayName();//Greg
    
    //3、构造函数模式
    //和工厂模式不同的在于
    //1、没有显示式的创建对象
    //2、直接将属性和方法赋给了this对象
    //3、没有reutrun语句
    //缺点:构造函数的方法在每个实例上都要重新创建一遍
    function Person(name, age, job) {
        this.name = name;
        this.age = age;
        this.job = job;
    
        this.sayName = function () {
            alert(this.name);
        }
    }
    
    var person3 = new Person("Nicholas", 24, "码农");
    var person4 = new Person("Greg", 24, "码农");
    
    person3.sayName();//Nicholas
    person4.sayName();//Greg
    alert(person3.sayName == person4.sayName);//false
    
    //创建Person的新实例,必须使用new操作符。以这种方式调用构造函数实际上会经历以下4个步骤
    //1、创建一个新对象
    //2、姜构造函数的作用与赋给新对象(因此this就指向了这个新对象)
    //3、执行构造函数中的代码(为这个新对象添加属性和方法)
    //4、返回新对象
    //每个实例都有一个constructor(构造函数)属性,该属性指向构造函数
    alert(person3.constructor == Person);//true
    alert(person4.constructor == Person);//true
    
    //将构造函数当作一个普通函数来使用
    Person("Tom", 27, "码农");
    window.sayName();//Tom
    
    var o = new Object();
    Person.call(o, "Kittey", 25, "码农");//apply方法也可以
    o.sayName();//Kittey
  • 相关阅读:
    iconv 文件编码相互转换
    MySQL 字符编码
    MySQL there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause同时创建多个更新当前时间戳字段 解决方法
    PHP 输出日志到文件 DEMO
    Nginx http -> https 跳转后 POST 丢失
    SSH SCP 远程密钥登录配置和服务器间的文件传输
    Mac 安装 7zip
    git pull There is no tracking information for the current branch.
    MacOS 安装配置 Laravel
    Mac OS 安装 MySQL5.7
  • 原文地址:https://www.cnblogs.com/qiangspecial/p/3144646.html
Copyright © 2020-2023  润新知