JS构造函数到底如何理解

JavaScript017

JS构造函数到底如何理解,第1张

不同于其它的主流编程语言,JavaScript的构造函数并不是作为类的一个特定方法存在的;

当任意一个普通函数用于创建一类对象时,它就被称作构造函数,或构造器。

一个函数要作为一个真正意义上的构造函数,需要满足下列条件:

1、 在函数内部对新对象(this)的属性进行设置,通常是添加属性和方法。

2、 构造函数可以包含返回语句(不推荐),但返回值必须是this,或者其它非对象类型的值。

上文定义的构造函数CO就是一个标准的、简单的构造函数。

在JavaScript的世界里没有类的概念,JavaScript是一种基于对象的语言,它包含5中原生数据类型:

number

boolean

string

null

undefined

除此之外,其他所有的都是对象,函数也是一个对象

// 这是一个函数声明,函数是一个特殊的对象

function method() {

}

构造函数,就是一个普通的函数,与其他函数没有任何区别,可以理解为 函数==构造函数,它只是概念上的一个定义,使用它用来实例化对象。

对于JavaScript的内置对象,Object、Array、Date等等这些都是构造函数。

function Obj() {

}

var o = new Obj() // 实例化

使用new运算符返回的对象并不一定是实例本身,也可以在构造函数用使用return改变返回值

function Obj() {

  this.a = 1

  return { a: 2 }

}

var o = new Obj() // o并不是Obj的实例

console.log(o.a) // 输出2

前面说到了函数也是一个对象,在JavaScript的内置对象中,所有的函数对象都是Function构造函数的实例,比如:Object、Array等等,这是一个很有意思的事情。

使用 instanceof 这个运算符就可以校验

instanceof运算符返回一个指定的对象是否一个类的实例,格式如:A instanceof B。其中,左操作数必须是一个对象,右操作数必须是一个类(构造函数)。

判断过程:如果函数B在对象A的原型链中被发现,那么instanceof操作符将返回true,否则返回false。

alert(Function instanceof Function) // Function函数对象 本身就是自己的一个实例

alert(Object instanceof Function) // Object函数对象 是 Function构造函数的一个实例

上面说道 instanceof 的现象是一件很有意思的事情,如果想了解更多,需要阅读 JavaScript原型链继承 相关的文章加深理解。

1、构造函数也是一个普通函数,创建方式和普通函数一样,但构造函数习惯上首字母大写

2、构造函数和普通函数的区别在于:调用方式不一样

3、普通函数的调用方式:直接调用 person()

4、构造函数的调用方式:需要使用new关键字来调用 new Person()

5、构造函数的执行流程

6、普通函数例子:因为没有返回值,所以为undefined

7、构造函数例子:构造函数会马上创建一个新对象,并将该新对象作为返回值返回

8、用instanceof 可以检查一个对象是否是一个类的实例,是则返回true;

所有对象都是Object对象的后代,所以任何对象和Object做instanceof都会返回true