首页 > 代码库 > 创建对象 --- 构造函数模式
创建对象 --- 构造函数模式
ECMAScript中的构造函数可以用来创造特定类型的对象,Object和Array 是原生构造函数,在 运行时会自动出现在执行环境。也可以自定义构造函数,示例如下:
function Person(name,age,job){ this.name = name; this.age = age; this.job = job; this.sayName = function(){ alert(this.name); }; }var person1 = new Person("wsc",25,"software Engineer");var person2 = new Person("yl",26,"Doctor");
注意:按照惯例,构造函数始终都应该以一个大写字母开头,而非构造函数则应该以一个小写字母开头,目的是区别ECMAScript中的其他函数,因为构造函数也是函数,只是配用来创建对象;
(1).创建Person新实例,必须使用new操纵符。这种方式调用构造函数实际上经历一下4个步骤:
1.创建一个新对象;
2.将构造函数的作用域赋给新对象;
3.执行构造函数中的代码;
4.返回新对象;
(2).构造函数都有一个构造函数属性constructor,该属性指向该对象所属的实例,以前面的例子为准:
alert(person1.constructor == Person);//true
1.对象的constructor属性主要目的是用来标识对象类型;
2.检测对象类型主要是用instanceof,示例如下:
alert(person1 instanceof Object);//true 注意:所有的对象均继承Object
alert(person1 instanceof Person);//true
3.创建自定义构造函数意味着将来可以将它的实力标识为一种特定的类型,这是构造模式胜过工厂模式的地方,
注意:以这种方式的构造函数是定义在Global对象中的;
(3).构造函数与其他函数的唯一区别是调用方式的不同:任何函数只要通过new操作符来调用,那么它就作为构造函数;任何函数如果不通过new操作符来调用,那么它就作为普通函数;
// 当作构造函数var person = new Person("wsc",26,"Software Engineer");person.sayName();//"wsc";//普通函数Person("wsc",26,"Software Engineer");//添加到windowwindow.sayName()//"wsc"//在另一个对象的作用域中调用var o = new Object();Person.call(o,"wsc",26,"Software Engineer");o.sayName();//"wsc"
创建对象 --- 构造函数模式