JavaScript——对象构造函数
使用对象字面量创建对象
以前我们都是这做的。使用对象字面量创建对象时,逐个地指定其属性:
var car = { make:"habo", model:"cow", year:2019, color:"blue", started:false, start:function(){ this.started = true; }, stop:function(){ this.started = false; } };
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
对象字面量提供了一个便利方式,让你能够在代码中随时随地创建对象,但需要创建大量对象时,你就会生无可恋了。我们可以通过对象构造函数来解决大量创建对象的问题。
使用构造函数创建对象
按人们头脑中的约定去创建相同的东西,一般是不可靠的,因为可能出现多一点少一点的情况,总与要求的标准有差距。如果有一个模具,人们只需要放入具体的数值,就可以创建出类似的对象,那该多好。用对象构造函数就可以达到这样的效果。我们先用对象字面量创建一个cat对象,再用构造函数创建它,来对比一下。
使用对象字面量创建:
var cat = { name:"kitty", color:"black-white", weight:5, bark:function(){ if(this.weight > 5){ alert("It is a fat cat!"); }else{ alert("please feed it more!"); } }
};
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
使用构造函数创建:
//先定义一个构造函数
function Cat(name,color,weight){ this.name = name; this.color = color; this.weight = weight; this.bark = function(){ if(this.weight > 5){ alert("It is a fat cat!"); }else{ alert("please feed it more!"); } }; } //使用构造函数创建对象 var cat1 = new Cat("Tom","white",5); cat1.bark();
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
使用构造函数创建对象,我们就可以创建任何包含name、color、weight属性和具有bark行为的猫了,再也不用担心有小伙伴会创建出不符合标准的“猫”来了。
对象构造函数和函数关系密切。对象构造函数与常规函数看起来没有什么两样。对像构造函数的函数名首字母大写,并非必须这样做。另外,属性名不一定要与形参一样,如:
function Cat(name,color,weight){ this.ming_zi = name; this.yan_se = color; this.zhong_liang = weight; }
- 1
- 2
- 3
- 4
- 5
使用对象构造函数创建对象时,使用new运算符,如:
//使用构造函数创建对象
var cat1 = new Cat("Tom","white",5);
- 1
- 2
使用对象构造函数创建对象的过程 |
---|
new首先创建一个新的空对象 |
接下来,new设置this,使其指向这个新对象 |
设置this后,调用函数Cat,并将"Tom",“white”,5作为实参传递给它 |
接下来,执行这个函数的代码。与大多数构造函数一样,Cat给新创建的this对象的属性赋值。 |
最后,Cat函数执行完毕后,运算符new返回this——指向新创建的对象的引用。请注意,它会自动为你返回this,因此无需在代码中显式地返回。指向新对象的引用被返回后,我们将其赋给变量cat1 |
我们还可以使用instanceof运算符,确定对象是由哪个构造函数创建的,如:
var b = cat1 instanceof Cat; //检测cat1是否是由Cat对象构造函数创建的
alert(b);
- 1
- 2
还可以用delete运算符,删除掉一些属性,如这只猫是不会叫的,删除掉bark属性:
delete cat1.bark;
- 1
当然,还可以用对象构造函数创建出来的对象继续添加属性和行为,如:
cat1.age = 11; //向cat1对象添加新属性
alert("cat's age:"+cat1.age);
//向cat1对象添加新行为
cat1.run = function(){ alert("I am running!");
};
cat1.run();
- 1
- 2
- 3
- 4
- 5
- 6
- 7
至此,我们明白了对象构造函数的声明与使用。其实,JavaScript也用同样的方法,为我们声明了很多有用的对象构造函数,即内置构造函数,如;
- var date = new Date(); 日期对象
- var array = new Array();数组对象,其实var arr = [];这样声明更方便。
- var obj = new Object();创建一个空对象,其实var obj = {};这样创建空对象更方便。
- Math实际上是一个用对象字面量创建的对象。所以这可以直接使用,如Math.PI等。
总结一下:
- 如果仅仅需要创建少量对象时,适合使用对象字面量,否则应该选择对象构造函数。
- 对象构造函数是使用运算符new进行调用的函数。
- 对象构造函数可以创建包含相同属性和方法的一致对象。
- 使用new调用对象构造函数时,将新建一个空对象,并在构造函数中将其赋给this。
- 在构造函数中,可使用this来访问正在创建的对象,进而给它添加属性。
- 构造函数自动返回它创建的新对象this。
- 与对象字面量一样,可以对用对象构造函数创建的对象进行修改。
提醒:JavaScript中的函数(我指的是所有函数),并不一定都要赋值,如:
function hello(msg,name,number){
alert(msg+" " +name+" "+number);
}
调用时 hello()、hello(“hi”)、hello(“hi”,“tom”)、hello(“hi”,“tom”,33)等,都是可以的,它并不严格要求你必须传值。
谢谢阅读!
文章来源: blog.csdn.net,作者:WongKyunban,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/weixin_40763897/article/details/88060722
- 点赞
- 收藏
- 关注作者
评论(0)