1、JavaScript内置的构造函数
JavaScript提供了Object、String、Number等构造函数,通过“new 构造函数()”即可创建对象。使用new关键字创建对象的过程称为实例化,实例化后得到的对象称为构造函数的实例。
// 通过构造函数创建对象
var obj = new Object(); // 创建Object对象
var str = new String('123'); // 创建String对象
// 查看对象是由哪个构造函数创建的
console.log(obj.constructor); // 输出结果:function Object() { [native code] }
console.log(str.constructor); // 输出结果:function String() { [native code] }
console.log({}.constructor); // 输出结果:function Object() { [native code] }
“对象.constructor
”属性指向了该对象的构造函数。
通过console.log()
输出时,[native code]
表示该函数的代码是内置的。
2、自定义构造函数
构造函数等同于此时只是做了初始化。
还需要⽤new
来实例化构造函数。
new做了两件事:
- 创建空⽩对象 var this=new Object()
- 返回经过加⼯过的对象 return this
上述代码会报错,obj is not defined
。
构造函数的命名推荐采用帕斯卡命名规则,即所有的单词首字母大写。
在构造函数内部,使用this
来表示刚刚创建的对象。
将obj
修改成this
,修改如下:
下面定义一个构造函数Person
function Person(name, age) {
this.name = name;
this.age = age;
this.sayHello = function () {
console.log('Hello, my name is ' + this.name);
};
}
创建p1,p2两个对象。
var p1 = new Person('Jack', 18);
var p2 = new Person('Alice', 19);
console.log(p1);
console.log(p2);
p1.sayHello();
console.log(p1.constructor);
3、构造函数中的return关键字
构造函数的本质是函数,因此构造函数中也可以使用return
关键字。
构造函数在使用时与普通函数有一定的区别:
若用return
返回一个数组或对象等引用类型数据,则构造函数直接返回该数据,而不会返回原来创建的对象。
若返回的是基本类型数据,则返回的数据无效,依然会返回原来创建的对象。
通过函数外部的变量obj
保存了构造函数中新创建的对象引用,然后通过对比obj
和构造函数实际返回的对象是否相同,来比较return
在构造函数中使用时的两种返回值情况。