• JavaScript对象的创建之构造函数


    通过构造函数的方式创建和基于工厂的创建类似,最大的区别就是函数的名称就是类的名称,按照java的约定,第一个字母大写。

    使用构造函数创建对象时,在函数内部是通过this关键字来完成属性的定义

    function Person(name, age){
        this.name = name;
        this.age = age;
                
        //带来的问题是所有的对象都会为该行为分配空间
        this.say = function(){  //注意:say也是Person的一个属性
            alert(this.name + "-->" + this.age);
        }
    }
    
    //通过new Person来创建对象
    var p1 = new Person("Leon",22);
    var p2 = new Person("Ada",32);
    p1.say(); 
    p2.say();
    alert(typeof p1); //object
    
    //使用构造函数的方式可以通过以下方式来检测对象的类型
    alert(p1 instanceof Person);  //true
    alert(p1.say == p2.say);     //false  由于方法是定义在类中的,所有这两个say不是一样的

    使用构造函数创建所带来的第一个问题就是每一个对象都会存在一个方法的拷贝,如果对象的方法很多的话,空间的占有率就会大大增加

    如何改进?可以将函数放在全局变量中定义,这样可以让类中的行为/方法指向同一个函数。

    function Person(name, age){
        this.name = name;
        this.age = age;
                
        this.say = say;
    }
    
    function say(){
        alert(this.name + "-->" + this.age);
    }
    
    var p1 = new Person("Leon",22);
    var p2 = new Person("Ada",32);
    p1.say(); 
    p2.say();
    
    alert(p1 instanceof Person);  //true
    alert(p1.say == p2.say);     //true

    将行为设置为全局的行为,如果将所有的方法都设计成全局函数的话,这个函数就可以被window调用,此时就破坏了对象的封装性

    而且如果某个对象有大量的方法,就会导致整个代码中充斥着大量的全局函数,这样将不利于开发。

  • 相关阅读:
    C# 序列化技术详解《转》
    DataGridView中的DataGridViewComboBoxColumn使用浅析
    取EXCEL文件的3种方法
    教你几种在SQLServer中删除重复数据方法
    事件浅析
    迭代委托链
    C#调用耗时函数时显示进度条浅探
    启动公告【过时】
    在Web应用中接入微信支付的流程之极简清晰版
    VBoxManage: error: Cannot register the hard disk 解决办法
  • 原文地址:https://www.cnblogs.com/luogankun/p/3954297.html
Copyright © 2020-2023  润新知