Object/Array/RegExp/Function对象的创建

一、Object/Array/RegExp/Function对象的创建
1、两种创建Object对象的方法
var person = new Object();

person.name = "Nicholas";
person.age = 29;
person.job = "Software Engineer";

person.sayName = function(){
	alert(this.name);
};

第一种是通过创建Object的实例,然后添加属性和方法。这种方法早起经常使用,不过现在不经常使用了,现在经常使用对象字面量的方式创建对象:

var person = {
	name: "Nicholas",
	age: 29,
	job: "Software Engineer",
	
	sayName: function(){
		alert(this.name);
	}
};
2、两种创建Array对象的方法
//方法1:通过Array构造函数
var colors = new Array();
var colors = new Array(20);
var colors = new Array("red", "blue", "green");
//方法2:通过数组字面量表示法
var colors = ["red", "blue", "green"];

通过Array构造函数创建数组对象时,new字符可以省略,第二句表示创建length值为20的数组。

3、两种创建RegExp对象的方法
//两种方式
var patt=new RegExp(pattern,flag);//正则表达式构造函数
var patt=/pattern/flag;//正则表达式字面量
//示例
var re = new RegExp("\\w+","i");//注意增加转义字符
var re = /\w+/i;
4、两种创建Function对象的方法

Function类型对象有两种定义方式,分别是使用函数声明语法定义和使用函数表达式定义

//使用函数声明语法创建函数对象
function sum (num1, num2) {
	return num1 + num2;
}
//使用函数表达式创建函数对象
var sum = function(num1, num2){
	return num1 + num2;
};
二、函数表达式和函数声明有什么不同之处

在js中,函数声明可以在函数调用之后出现,但是如果以函数表达式形式定义函数,必须出现在函数调用之前:

//函数声明可以在函数调用之后出现
alert(sum(10,10));
function sum(num1, num2){
	return num1 + num2;
}
//不可行,报错
alert(sum(10,10));
var sum = function(num1, num2){
	return num1 + num2;
};

但是,这是为什么呢?因为js在代码执行之前会有一个函数声明提升function declaration hoisting的过程,读取并将函数声明添加到执行环境中。这个执行环境可以理解为作用域。

三、new配合构造函数创建实例对象的过程

此部分引自:用关键字new创建对象 new都做了什么(随笔) - 但愿人长久 千里共婵娟 - CSDN博客
结合以下例子说明,

function Person () {
    this.name = name;
    this.age = age;
    this.job = job;
 
    this.sayName = function () {
        return this.name;
    };
}
 
var person = new Person("tom", 21, "WEB");
console.log(person.name);

使用关键字new创建新实例对象经过了以下几步:
1、建立一个空对象,即:var person = {};
2、新对象的_proto_属性指向构造函数的原型对象
3、将构造函数的作用域给新对象this对象指向新对象
4、执行构造函数内部的代码,将属性添加给person中的this对象
5、返回新对象person

var person = {};
person._proto_ = Person.prototype; //引用构造函数的原型对象
Person.call(person); //将构造函数的作用域给person,即:this值指向person

Reference:
  1. 《JavaScript高级程序设计(第三版)》
  2. 用关键字new创建对象 new都做了什么(随笔) - 但愿人长久 千里共婵娟 - CSDN博客
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值