zoukankan      html  css  js  c++  java
  • 对象(一)

    1、工厂模式
    function createPerson(name,age,sex) {
            var obj = new Object();
            obj.name = name;
            obj.age = age;
            obj.sex = sex;
            obj.sayName = function () {
                alert(this.name)
            }
            return obj;
        }
    
        var p1 = createPerson("张三",20,"")
        var p2 = createPerson("李四",22,"")

    2、构造函数模式

    函数的第一个字母大写,表示该函数为构造函数,可以通过 new 方法进行实例化对象
    function Person(name,age,sex) {
            this.name = name;
            this.age = age;
            this.sex = sex;
            this.sayName = function () {
                alert(this.name);
            }
        }
        // 实例化对象时,每个对象都将创建一个 sayName 的方法,因此每个对象的 sayName 方法都不相同
        var p3 = new Person("王五",23,"");
        var p4 = new Person("赵六",24,"")
        alert(p3.sayName == p4.sayName)         // false

    由于实例化对象时,每个对象都将创建一个 sayName 的方法,因此每个对象的 sayName 方法都不相同,所以效率相对较低,改进方法一 :

    function Person2(name,age,sex) {
            this.name = name;
            this.age = age;
            this.sex = sex;
            this.sayName = sayName;
        }
        function sayName() {
            alert(this.name);
        }
    
        var p5 = new Person2("周周",32,"");
        var p6 = new Person2("屋五",22,"");
        alert(p5.sayName == p6.sayName);        // true

    此时,创建的所有对象将共用一个 sayName 方法,但是该方法还有个缺点,就是创建了一个全局的 sayName 函数,效率也是比较低下

    改进方法二,使用 原型的方法:

    function Person3(name,sex) {
            this.name = name;
            this.sex = sex;
        }
        var obj = Person3.prototype;
        obj.age = 26;
        obj.sayName = function () {
            alert(this.name);
        }
        var p7 = new Person3("真真","")
        var p8 = new Person3("望望","")
        alert(p7.age)                       // 26
        alert(p7.sayName == p8.sayName)     // true
        alert(obj.isPrototypeOf(p7)) 

    注意 :   构造函数.prototype = 原型对象

        原型对象.constructor = 构造函数

    isPrototypeOf  
    obj.isPrototypeOf(p7) 判断 p7 的原型是不是 obj
  • 相关阅读:
    leetcode刷题 557~
    Unity正交相机智能包围物体(组)方案
    Embedded Browser(ZFBrowser)使用相关问题
    Unity性能优化
    sipp的使用
    Elment清除表单验证,防止报错小技巧
    git常用命令(干货)
    文本单词one-hot编码
    86. 分隔链表 链表
    5638. 吃苹果的最大数目 优先队列
  • 原文地址:https://www.cnblogs.com/debra/p/7798005.html
Copyright © 2011-2022 走看看