在es6中引入了class类的概念,这样使得js看起来更像是一门面向对象的语言,条理更加清晰
//es5//函数名和实例化构造名相同且大写(非强制,但这么写有助于区分构造函数和普通函数)function Person(name,age) { this.name = name; this.age=age;}Person.prototype.say = function(){ return "我的名字叫" + this.name+"今年"+this.age+"岁了";}var obj=new Person("hcy",23);//通过构造函数创建对象,必须使用new 运算符console.log(obj.say());//我的名字叫hcy 今年23岁了
执行过程是这样的
1.当使用了构造函数,并且new 构造函数(),后台会隐式执行new Object()创建对象;
2.将构造函数的作用域给新对象,(即new Object()创建出的对象),而函数体内的this就代表new Object()出来的对象。
3.执行构造函数的代码。
4.返回新对象(后台直接返回)
如果用es6的写法就是
class Person{//定义了一个名字为Person的类
constructor(name,age){//constructor是一个构造方法,用来接收参数
this.name = name;//this代表的是实例对象
this.age=age;
}
say(){
return "我的名字叫" + this.name+"今年"+this.age+"岁了";
}
}
var obj=new Person("hcy",23);
console.log(obj.say());//我的名字叫hcy 今年23岁了
这样方法就是写到了constructor之外,属性就写到了构造函数之外,在我的理解看来就是这样的,原型对象prototype.constructor就是构造函数的构造器,通过原型对象的这个属性就可以构造出构造函数,并且原型对象的原型就是构造函数构造出的对象实例.