博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript定义对象写法
阅读量:5123 次
发布时间:2019-06-13

本文共 3484 字,大约阅读时间需要 11 分钟。

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"
}
上面的方式创建了类,只是没赋给一个变量而已。

 

6、create方式

该方式利用了Prototype JavaScript组件库。

格式:
       var 对象名 = Class.create();
       Object.extend(对象名.prototype, {
            变量1: 变量1的值,
            变量1: 变量1的值,
             ……,
            函数1: function() {
                     函数体
                },
            函数2: function() {
                     函数体
            },
……
});
说明:
(1)       对象的创建使用了Prototype库中的Class.create()函数;
(2)       对象的内容使用Prototype库中的Object.extend()函数来扩展;
(3)       被扩展的对象在传入Object.extend函数时一定要带上prototype,
(4)       扩展内容被大括号包含,其内与JSON方式的定义格式完全相同。
例子:
   

var data = Class.create();Object.extend(dta.prototype, {    name: "Vicky",    age: 20,    eat: function () {        alert(‘I wanna eat meat’);    },    sleep: function () {        alert(‘I wanna sleep’);    }});

其实,JS对象的定义还有其它的方式,你也可以用上面几种进行组合定义,这显出了JS作为动态语言的自由性。

JS对象的创建正规方法如下:

var d1 = new Data();

JS对象变量的引用方式有两种:

(1)       点号方式引用,如,data.name。
(2)       数组方式引用,如,data[‘name’]

转载于:https://www.cnblogs.com/leejersey/p/4156971.html

你可能感兴趣的文章
4----COM:a Generative Model for group recommendation(组推荐的一种生成模型)
查看>>
UVA 11137 - Ingenuous Cubrency
查看>>
js阻止事件冒泡的两种方法
查看>>
Java异常抛出
查看>>
CGRect知多少
查看>>
Android 开发环境安装配置手册
查看>>
[SQL Server 系] T-SQL数据库的创建与修改
查看>>
74HC164应用
查看>>
变量声明和定义的关系
查看>>
Wpf 之Canvas介绍
查看>>
linux history
查看>>
除去内容中的空格与换行
查看>>
jQuery on(),live(),trigger()
查看>>
Python2.7 urlparse
查看>>
sencha touch在华为emotion ui 2.0自带浏览器中圆角溢出的bug
查看>>
【架构】Linux的架构(architecture)
查看>>
ASM 图解
查看>>
Filter过滤器
查看>>
任务管理器启动资源管理器
查看>>
canny算法的实现(android加载图片,数组写入文件换行)
查看>>