JavaScript——对象构造函数

举报
yd_221104950 发表于 2020/12/02 22:43:23 2020/12/02
【摘要】 使用对象字面量创建对象 以前我们都是这做的。使用对象字面量创建对象时,逐个地指定其属性: var car = { make:"habo", model:"cow", year:2019, color:"blue", started:false, start:function(){ this.started = true; }, stop:function(){ t...

使用对象字面量创建对象

以前我们都是这做的。使用对象字面量创建对象时,逐个地指定其属性:

 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也用同样的方法,为我们声明了很多有用的对象构造函数,即内置构造函数,如;

  1. var date = new Date(); 日期对象
  2. var array = new Array();数组对象,其实var arr = [];这样声明更方便。
  3. var obj = new Object();创建一个空对象,其实var obj = {};这样创建空对象更方便。
  4. Math实际上是一个用对象字面量创建的对象。所以这可以直接使用,如Math.PI等。

总结一下:

  1. 如果仅仅需要创建少量对象时,适合使用对象字面量,否则应该选择对象构造函数。
  2. 对象构造函数是使用运算符new进行调用的函数。
  3. 对象构造函数可以创建包含相同属性和方法的一致对象。
  4. 使用new调用对象构造函数时,将新建一个空对象,并在构造函数中将其赋给this。
  5. 在构造函数中,可使用this来访问正在创建的对象,进而给它添加属性。
  6. 构造函数自动返回它创建的新对象this。
  7. 与对象字面量一样,可以对用对象构造函数创建的对象进行修改。

提醒: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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。