JavaScript的构造函数

作者: 前端小菜鸟bojue | 来源:发表于2019-10-10 14:17 被阅读0次
文章来源 | bojue(公众号:前端骑士)

在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

相关文章

  • 构造函数和原型对象

    javascript使用构造函数和原型对象来进行面向对象编程 构造函数 在 JavaScript 中,构造器其实就...

  • 原型与原型链

    构造函数与原型 JavaScript 语言使用构造函数(constructor)作为对象的模板。所谓”构造函数”,...

  • JavaScript 面向对象编程

    构造函数 JavaScript中的构造函数是创建对象时调用的函数,写法如下: 定义Person构造函数(默认构造函...

  • JavaScript的构造函数扩展、继承以及封装

    构造函数的扩展 扩展Man构造函数 构造函数的继承 Dog 继承 Pig JavaScript 内置对象的扩展 例...

  • javaScript面向对象—构造函数,原型和原型链

    构造函数 什么是构造函数 在javaScript中,用new关键字来调用的函数,称为构造函数。一般将构造函数的首字...

  • 前端高频面试题之——原型链

    JavaScript中的构造函数 原型是什么 面向对象语言中,类派生实例,JavaScript的函数可以作为构造器...

  • 2018-11-22

    JavaScript的面向对象是基于constructor(构造函数)与prototype(原型链)的。 构造函数...

  • 22

    JavaScript的面向对象是基于constructor(构造函数)与prototype(原型链)的。 构造函数...

  • 面向对象2

    JavaScript的面向对象是基于constructor(构造函数)与prototype(原型链)的。 构造函数...

  • OOP-2

    JavaScript的面向对象是基于constructor(构造函数)与prototype(原型链)的。 构造函数...

网友评论

    本文标题:JavaScript的构造函数

    本文链接:https://www.haomeiwen.com/subject/zzoopctx.html