在面向对象的类C语言如Java语言中,咱们使用构造函数是实例化对象的过程,在JavaScript语言中咱们能够使用构造函数的方式建立对象,如:javascript
let obj = new LanguageFun("javaScript")
与面向对象的语言不一样,JavaScript使用构造函数建立对象不是真正意义上的实例化,而是经过new操做符调用的构造函数。java
构造函数的执行过程:函数
包括咱们知道的内置函数Number(), String()均可以使用new操做符建立新的对象,这种函数在JavaScript中称为构造函数的调用。咱们能够经过实例理解这个过程:测试
function LanguageFun(name){ this.name = name this.sayHello = function(){ console.log("Hello , ",this.name) } } let obj = new LanguageFun("javaScript") obj.sayHello(); // Hello , javaScript
new LanguageFun()执行过程:this
测试:prototype
console.log(obj.__proto__ === LanguageFun.prototype); //true
当咱们使用new操做符调用构造函数的时候没有问题,可是有时候咱们会忘记使用new操做符,使用了普通函数的调用方式,产生异常,因此咱们须要对JavaScript的构造函数进行兼容改造。code
function LanguageFun(name){ if(!(this instanceof LanguageFun)) { return new LanguageFun(name) } this.name = name this.sayHello = function(){ console.log("Hello , ",this.name) } } let obj1 = new LanguageFun("javaScript") let obj2 = LanguageFun("javaScript") obj1.sayHello(); // Hello , javaScript obj2.sayHello(); // Hello , javaScript