在Java等面向对象的类C语言中,我们使用构造函数来实例化对象。在JavaScript中,我们可以使用构造函数来创建对象,例如:letobj=newLanguageFun("javaScript")与面向对象语言不同,JavaScript使用构造函数来创建对象,并不是真正意义上的实例化,而是通过new调用的构造函数操作员。构造函数的执行过程:新建一个待执行的对象objobj原型链[[prototype]]将obj连接到函数调用的this上如果没有其他返回对象,返回obj包括我们知道的内置函数Number(),String()可以使用new运算符创建一个新的对象,这个函数在JavaScript中称为构造函数调用。我们可以通过例子来理解这个过程:")obj.sayHello();//你好,javaScriptnewLanguageFun()执行过程:对象创建:创建一个全新的对象:letobj=newObject();[[prototype]]连接:obj.__proto__=LanguageFun.prototypethis绑定:this指向新创建的objobject执行LanguageFun()函数返回这个对象Test:console.log(obj.__proto__===LanguageFun.prototype);//真正使用new运算符调用构造函数时的兼容处理有时候没有问题,但是有时候忘记使用new运算符,使用普通函数的调用方法,导致异常,所以需要做兼容转换到JavaScript构造函数。functionLanguageFun(name){if(!(thisinstanceofLanguageFun)){returnnewLanguageFun(name)}this.name=namethis.sayHello=function(){console.log("Hello,",this.name)}}letobj1=newLanguageFun("javaScript")让obj2=LanguageFun("javaScript")obj1.sayHello();//你好,javaScriptobj2.sayHello();//你好,javaScript
