在ECMAScript中的构造函数可用来创建特定类型的对象,想Object和Array这样的原生构造函数,在运行是会自动出现在执行环境中。因此,可以创建自定义的构造函数,从而定义对象类型的属性和方法。
1、如下例子,使用构造函数创建原型对象:
function Person(name,age){ this.name=name; this.age=age; this.sayName = function(){alert(this.name)}; }
注意:
1)、函数名Person使用的是大写字母P;
2)、构造函数本身也是函数,之不过可以用来创建对象而已。
2、要创建Person的新实例,必须使用new操作符:
var person1 = new Person("zhangsan",20); var person2 = new Person("lisi",21); alert(person1.name); alert(person1.age);
调用构造函数会经历一下4个步骤:
1)、创建一个新的对象;
2)、将构造函数的作用域赋给新对象;
3)、执行构造函数中的代码;
4)、返回新对象。
3、将构造函数当作函数:构造函数与其他函数的唯一区别,就在于调用它们的方式不同,不过构造函数毕竟也是函数,不存在定义构造函数的特殊语法。
1)、当作构造函数使用:
var person = new Person("zhangsan",20); person.sayName(); //"zhangsan"
展示了构造函数的典型用法,即使用new操作符来创建一个新对象。
2)、作为普通函数使用:
Person("lisi", 21); //添加到window window.sayName(); //"lisi"
展示了不使用new操作符调用Person()会出现什么结果:属性和方法都被添加给window对象了。
3)、在另一个对象的做的作用域中调用:
var a = new Object(); Person.call(a, "zhangsan", 20); a.sayName(); //"zhagnsan"
使用call()在某个特殊的对象的作用域中调用Person()函数。