前面我们声明对象时都是通过字面量直接定义的,另外我们还可以通过new关键词实例化一个内置构造函数/自定义构造函数得到一个对象。
下面我们就说一下这两种获得对象的方法
1、new自定义的构造函数
function fn(){
}
var obj2 = new fn();
console.log(obj2, typeof obj2);
以上我们定义了一个名为fn的函数,然后new这个函数,就能得到一个对象,它的类型是object。我们把这个被new的函数称为构造函数,把new的过程称为实例化,即:从一个类里面取得一个实实在在的对象。
那么,大家就会问,为什么要这样做呢,其实,它的作用和使用function封装函数一样,最大的意义都是为了方便代码的重用。与function不同的是,使用对象是面向对象的一种编程思想,使用函数是面向过程的编程思想。
面向对象编程是目前主流的编程思想,它有诸多优点,后面我们会详细讲解面向对象的全过程,这里只是提一下。
下面我们来讲一下,可以被new的构造函数和普通函数有什么区别,构造函数有以下几个特性:
特性一:构造函数被实例化时,内部的代码会被自动执行
function fn(){
console.log(300);
}
var obj2 = new fn();
特性二:构造函数内部可以使用this设置属性和方法
// 构造函数名称,通常首字母大写(不是语法要求,只是习惯)
function Fn(){
//在构造函数内部,使用 this.成员名 = 成员值
this.age = 40;
this.say = function(){
return 'hello';
}
}
var obj2 = new Fn();//实例化构造函数fn,得到对象
console.log(obj2, typeof obj2);
console.log( obj2.say() );
2、new内置构造函数
在前面我们已经知道如何自定义一个构造函数,其实在JS内部已经定义好了很多内置的构造函数,在使用时,我们只需要new一下这些构造函数即可得到相应的实例化对象,不需要手动定义构造函数。
今天我们先讲Object这个顶级构造函数,其它的内置构造函数下节来讲。
var obj1 = new Object();
// var obj1 = new Object;//后面的小括号,可以不加,推荐还是加上
console.log(obj1); //得到一个空对象,等同于var obj1 = {};
//下面我们可以给这个空对象赋值
obj1.name='zhangsan';
console.log(obj1,typeof obj1);
以上就是使用new Object与对象的构造函数来创建对象的方法,大家自己动手练习一下,下一篇再继续。
|