zoukankan      html  css  js  c++  java
  • Javascript创建对象的几种方式【转】

    1.构造函数方式,全部属性及对象的方法都放在构造方法里面定义

    优点:动态的传递参数

    缺点:每创建一个对象就会创建相同的方法函数对象,占用大量内存

    function User1(name, password) {
    this.name = name;
    this.password = password;
    this.login = function(name,password){
    if(this.name == name && this.password == password) {
    return true;
    }else {
    return false;
    }
    };
    }

    2.原型方式,将对象属性及方法定义都写在对象的prototype里面

    优点:每次创建对象时都是使用相同prototype中的方法,不会占用重复的内存

    缺点:无法动态传递构造参数

    function User2() {

    }
    User2.prototype.name = "prototype name";
    User2.prototype.password = "prototype password";
    User2.prototype.login = function(name,password){
    if(this.name == name && this.password == password) {
    return true;
    } else {
    return false;
    }
    };
    原型方式的另一种写法:
    格式:
    var 对象名 = {};
    对象名.prototype.变量1=变量1的值;
    对象名.prototype.变量2=变量2的值;
    ……;
    对象名.prototype.函数1= function() {
    函数体
    };
    对象名.prototype.函数2= function() {
    函数体
    };
    ……;
    说明:
    (1)初始对象体内可以不定义任何东西;
    (2)在要定义的变量前加“对象名.prototype.”的格式;
    (3) 对象的内容与值以等号分隔,成对出现;
    (4) 包含的变量或者函数之间以分号分隔,也可以省去分号。
    (5) 函数需要写在function(){}的大括号之内。
    例子:
    var data = {};
    data.prototype. name ="Vicky”;
    data.prototype. age =20;
    data.prototype. eat = function() {
    alert(‘I wanna eat meat’);
    };
    data.prototype. sleep= function() {
    alert(‘I wanna sleep’);

    };

    3.构造及原型混合方式,将属性定义写在构造方式里面,方法写在prototype里面

    优点:综合了construct及prototype方式的优点,可以动态传递构造参数,并且方法函数对象也只创建一个

    缺点:函数写在对象外面,不太符合面向对象的思想

    function User3(name,password) {
    this.name = name;
    this.password = password;
    }
    User3.prototype.login = function(name,password) {
    if(this.name == name && this.password == password) {
    return true;
    } else {
    return false;
    }
    };

    4.动态原型方式:加一个判断属性,来判断该对象是否已经被创建过,如果被创建过,则方法就不在构建

    优点:将原型函数写在对象定义里面

    缺点:不支持继承

    function User4(name,password) {
    this.name = name;
    this.password = password;
    if(typeof User4.__initialized == "undefined") {
    User4.prototype.login = function(name,password){
    if(this.name == name && this.password == password) {
    return true;
    } else {
    return false;
    }
    };
    User4.__initialized = true;
    }
    }

    5、JSON方式/对象直接量

    格式:
    var 对象名 = {
                 变量1: 变量1的值,
                 变量1: 变量1的值,
                 ……,
                函数1: function() {
                    函数体
                },
                函数2: function() {
                    函数体
                }//Note:最后的逗号要去除为了和IE兼容。
    };
    说明:
    (1)大括号内直接填写变量或者函数;
    (2)对象的内容与值以冒号分隔,成对出现;
    (3)包含的变量或者函数之间以逗号分隔;
    (4)函数需要写在function(){}的大括号之内。
    例子:
    var  对象名 = {
           name:    “Vicky”,
           age:     26,
           eat: function() {
                  alert(‘I wanna  eat meat’);
           },
           sleep: function() {
                  alert(‘I wanna sleep’);
            }
    };
    注释:类似的方式也叫做匿名类
    匿名类举例:    
    {
        index: '//',
        reg: new RegExp('^//.*$'),
        css: "comment"
    }
    上面的方式创建了类,只是没赋给一个变量而已。

    仔细看会发现这种方式和定义json对象很像,只不过定义json对象的键值必须为字符串,如下所示:

    var user={"name":"Vicky","age":26,"gendor":"男"};

    当Javascript对象中只有属性时,可以调用json官网提供的json2.js文件中的stringify函数先将Javascript对象转换为字符串,然后在字符串的两端添加左右括号,再调用eval函数就可以得到json对象了。

    var user={name:"Vicky",age:26,gendor:"男"};

    var str=JSON2.stringify(user);

    var json=eval('('+str+')');

    alert(json.name);

  • 相关阅读:
    H01-Linux系统中搭建Hadoop和Spark集群
    L07-Linux配置ssh免密远程登录
    L06-Ubuntu系统中部署Vagrant和VirtualBox
    P03-Python装饰器
    L05-Linux部署msmtp+mutt发送邮件
    O01-Linux CentOS7中利用RDO部署OpenStack
    L03-Linux RHEL6.5系统中配置本地yum源
    LoggerFactory.getLogger用法
    maven配置本地和远程仓库
    Jmeter下载安装配置及使用(windows)
  • 原文地址:https://www.cnblogs.com/hnsdwhl/p/2078530.html
Copyright © 2011-2022 走看看