JavaScript的构造函数

11次阅读

共计 1136 个字符,预计需要花费 3 分钟才能阅读完成。

在面向对象的类 C 语言如 Java 语言中,我们使用构造函数是实例化对象的过程,在 JavaScript 语言中我们可以使用构造函数的方式创建对象,如:

let obj = new LanguageFun("javaScript") 

与面向对象的语言不同,JavaScript 使用构造函数创建对象不是真正意义上的实例化,而是通过 new 操作符调用的构造函数。

构造函数的执行过程:

  1. 创建一个新的对象 obj
  2. obj 被执行原型链 [[prototype]] 连接
  3. obj 绑定到函数调用的 this 上
  4. 没有其他返回对象,则返回 obj

包括我们知道的内置函数 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()执行过程:

  1. 对象创建:创建一个全新的对象:let obj = new Object();
  2. [[prototype]]连接:obj.__proto__ = LanguageFun.prototype
  3. this 绑定:this 指向刚创建的 obj 对象
  4. 执行 LanguageFun()函数
  5. 返回 this 对象

测试:


console.log(obj.__proto__ === LanguageFun.prototype); //true

兼容处理

当我们使用 new 操作符调用构造函数的时候没有问题,但是有时候我们会忘记使用 new 操作符,使用了普通函数的调用方式,产生异常,所以我们需要对 JavaScript 的构造函数进行兼容改造。

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

最后

个人公众号:前端骑士。

专注前端技术分享,欢迎前端的小伙伴一起学习交流。

正文完
 0