Headfirst JS:高级对象构造技巧:创建对象

构造函数:

//1.创建构造函数
function Dog(name,breed,weight){
 this.name=name;
 this.breed = breed;
 this.weight =weight;
 this.bark = function(){
  if(this.weight>25){
    alert(this.name+"says Woof!");
   }else{
    alert(this.name + "says Yip!");
   }
};
}
//2.使用构造函数
var fido = new Dog("Fido","Mixed",38);

构造函数的工作原理:

  1. new 首先创建一个 新的空对象
  2. 接下来,new 将 新的空对象的地址 赋值给this
  3. 设置this后,new 调用 函数Dog,并将 “Fido”,"Mixed"和38作为实参传递给它。
  4. 接下来,执行这个函数的代码。
  5. 最后,Dog函数执行完毕,运算符new 返回 this —— 对象 的地址

注意:

1.在js中 new运算符 一定是 和构造函数结合使用的, 假如 使用构造函数时忘了new,那么在构造函数中,this指向将不会是新创建的对象,而是浏览器中的window对象。并且没有new 无法返回 新对象的地址。

2.构造函数没有返回值,假如你写了return语句,那么会导致混乱。

技巧:

假如构造函数的形参很多,可以将所有参数都放在一个对象字面量中,再将这个对象字面量传递给函数。这样可以避免出错

var cadiParams = {
    make:"GM",
    model:"Cadillac",
    year:1955,
    color:"tan",
    passengers:5,
    convertible:false,
    mileage:12892
};

var cadi = new Car(cadiParams);
function Car(params){
  this.make =params.make;
  this.model = params.model;
  this.year = params.year;
  this.color = params.color;
  this.passengers = params.passengers;
  this.convertible = params.convertible;
  this.mileage = params.mileage;
  
  this.start = function(){
   this.started = true;
};

} 

对象实例

使用运算符instanceof可以确定对象是由哪个构造函数创建的。

var cadi = new Car(cdiPrarms);
if(cadi instanceof Car){
   console.log("Congrats,it's a Car!");
}
//如果对象是由指定的构造函数创建的,运算符instanceof将返回true
//在这里我们说,cadi是构造函数Car创建的一个实例
//创建对象时,运算符new在幕后存储了一些信息,让你随时都能确定对象是由哪个构造函数创建的

即便是创建好的对象,也可以有独特的属性

var fido = new Dog(“Fido”,“Mixed”,38);
fido.owner = "Bob" ;//要给这个对象添加新属性,只需要给这个新属性赋值即可
delete fido.weight; //也可以使用运算符delete 删除既有属性。
fido.trust = function(person){//如果愿意,也可以添加新方法
   return (person == "Bob");
}

内置构造函数

要创建日期对象,只需使用其构造函数即可:

var now =new Date();
var dateString = now.toString();
// 返回一个表示日期的字符串,如“Thu Feb 06 2014 17:29:09 GMT - 0800(PST)”.
var theYear = now.getFullYear();
//返回日期中的年份
var theDayOfWeek = now.getDay();
//返回一个数字,指出日期对象表示的是星期几,例如1

//通过向构造函数Date 传递 额外的实参,可轻松地创建表示任何日期和时间的日期对象。
var birthday =new Date("May 1,1983");

数组对象

var emptyArray = new Array();//创建一个长度为0的空数组
emptyArray[0]=99;//添加元素
var Array = new Array(3);//创建一个长度为3的数组
var Array = new Array(1,2,3);//创建一个元素为1,2,3的数组
//相当于
var Array = [1,2,3];
//但是使用new来创建数组,数组长度可以是一个变量
var n;
var Array = new Array(n);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值