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
  • 相关阅读:
    c# 把对象加入队列,对象为全局变量,对象改变队列值也跟着改变
    C# 一个数组未赋值引发的错误
    c# 2016QQ自动登录程序
    当时钟事件声明为过程变量 让system.threading.timer时钟失效
    if 循环的深入理解 哈希表的一种应用
    VB6对象与地址相互转换
    VB6的函数指针传递
    .net framework 4.0 从 GAC 卸载 程序集
    .net framework 4.0 从 GAC 卸载 程序集
    GAC in CLR 3.0
  • 原文地址:https://www.cnblogs.com/debra/p/7798005.html
Copyright © 2011-2022 走看看