共有三种方式:
第一种模式:工厂模式
- 工厂模式:即在函数中创建对象时,所有属性使用参数传递进来
- 工厂模式创建出来的对象使用typeof打印出来的全是object
function Student(name,age,sex,score){
var stu = new Object();
stu.name = name;
stu.age = age;
stu.sex = sex;
stu.score = score;
stu.sayHi = function(){
console.log("我叫"+this.name+"今年"+this.age+"岁");
}
return stu;
}
var stu1 = new Student("zs",18,1,100);
第二种模式:构造函数模式
- 原理:使用this关键字改变对象归属
- 与工厂方式相比,使用构造函数方式创建对象,无需再函数内部重建创建对象,而使用this指代,并而函数无需明确return
- this :指向构造函数;
- 若函数中有rerun 返回值,new 方式返回的是什么值?
-当return返回的是引用类型,则返回的是this
-当return返回的是值类型,则返回的是值类型;
function Student(name,age,sex,score){
this.name = name;
this.age = age;
this.sex = sex;
this.score = score;
this.sayHi = function(){
console.log("我叫"+this.name+"今年"+this.age+"岁");
}
}
var stu1 = new Student("zs",18,1,100);
第三种模式:原型模式
- prototype:是构造函数的原型属性。将属性或方法绑定到构造函数的prototype上后,将来通过构造函数创建的对象都有这个属性或方法
- 使用:一般通过原型属性绑定公共的方法和属性
- proto:是对象的原型属性
- 对象的原型属性proto指向构造函数的原型属性prototype
其中构造函数模式通常和原型模式混合使用,上边的例子就是混合的构造函数,原型方式。推荐使用这种方式
function Student(name,age,sex,score){
this.name = name;
this.age = age;
this.sex = sex;
this.score = score;
}
Student.prototype.sayHi = function(){
console.log("我叫"+this.name+"今年"+this.age+"岁");
}