JavaScript:创建对象

创建对象

字面量形式创建对象

//格式
var  对象名 = {
    属性名: 属性值,
    属性名: 属性值,
    方法名: function() {}
};

//创建car对象
<script type="text/javascript">
var car = {
	//属性
	brand: "宝马",
	price:  10000000,
	color: "grey",
	
	//方法
	run: function(){ console.log("跑起来了!!"); },
	stop: function(){ console.log("停下来了!!"); }
};
</script>

查询输出,注意car.run输出的是整个方法体,car.run()是执行方法。

添加属性

对象名.属性名 = 值;

对象名["属性名"] = 值;

删除属性

delete  对象名.属性名;

delete  对象名["属性名"];

修改属性

对象名.属性名 = 值;

对象名["属性名"] = 值;

查找属性

对象名.属性名;

对象名["属性名"];

区别:点语法不支持变量、而中括号支持变量

注意:如果对象中有该属性,那么返回属性的值。如果对象中没有该属性,那么返回undefined

遍历属性

for (var 变量名 in 对象名) {
    console.log(变量名+":"+对象名[变量名]);
}

in关键字

该关键字的作用是判断一个属性是否属于该对象

格式:属性名 in 对象

结果为true(包含该属性)或者false(不包含该属性),该关键字不仅可以判断私有属性,也可以判断原型中的公有属性

调用方法

对象名.方法名();

对象名["方法名"]();

注意:如果在调用方法时不加小括号,会获取该方法的方法体

修改方法

对象名.方法名 = function() {};

对象名["方法名"] = function() {};

删除方法

delete  对象名.方法名;

delete  对象名["方法名"];

字面量形式创建对象的利弊

优点:简单、易懂

缺点:

不利于提高代码的复用性

通过字面量形式创建的对象都是Object类型,没有办法进行细化对象的类型

工厂模式创建对象

就是把创建对象的语句封装到一个函数中,该函数的作用就是可以批量的创建具有同种属性的对象,它有利于提高代码的复用性

//格式1
function 函数名(参数1,参数2…) {
    var obj = new Object(); //格式2将第一行语句替换为 var obj = {};
    obj.属性名1 = 参数1;
    obj.属性名2 = 参数2;
    obj.方法名3 = function() {};
    return obj;
}
//格式3
function 函数名(参数1,参数2…) {
    return {
        属性名1:参数1,
        属性名2:参数2,
        方法名3:function(){}
    }
}

//创建createObj工厂
<script type="text/javascript">
    function createObj(name,age,gender){
        var obj = new Object();
        obj.name = name;
        obj.age = age;
        obj.gender = gender;
        obj.speak = function() { console.log("hello world") };
        return obj;
    }    
    var res1 = createObj("张三",10,"男");
    var res2 = createObj("李四",18,"男");
</script>

工厂模式创建对象的利弊

优点:解决了批量创建具有同种属性的对象的问题,提高了代码的复用性

缺点:也没有解决对象类型的区分问题

构造方法创建对象

创建对象的方式有字面量形式创建对象,工厂模式创建对象,但是他们都没有解决对象类型的区别问题。构造方法就是一个用来批量创建具有同种属性的对象的特殊函数。该种创建对象的方法解决了对象类型区分问题

//格式
function 函数名(参数1,参数2,参数3…) {
    this.属性名1 = 参数1;
    this.属性名2 = 参数2; 
    this.方法名 = function(){};
}

//创建Car构造方法
<script type="text/javascript">
    function Car(brand,price,color){
        this.brand = brand;
        this.price = price;
        this.color = color;
        this.run = function(){ console.log('跑起来了!!'); };
        this.stop = function(){ console.log('停下来了!!'); };
    }
    var res = new Car("QQ",30000,"red");
</script>

注意

构造函数的本质也是函数,但是为了普通函数做区分,构造函数的名字通常为单词首字母大写;

如果构造方法中不包含参数,那么在调用时可以省略小括号,如var arr = new Array;

如果是内置的构造方法,那么在调用时可以省略new关键字,如var arr = Array(); 但是不可以将new关键字和小括号同时省略,否则无法创建对象。

构造函数中可以定义变量,这个变量属于该函数的局部变量,在该函数内部可以使用,但是要注意由该构造函数创建出来的对象无法访问该变量,因为它不属于任何对象,为了提高代码的安全性和健壮性,可以在构造函数中创建set和get方法对此局部变量进行操作。

构造方法中不加return关键字,如果加return关键字,那么如果返回值的类型为基本类型,不影响构造方法创建对象,即此时依旧可以返回对象,但是如果return后面的返回值为引用类型,那么构造方法创建出来的对象就会被覆盖掉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值