美文网首页
js函数与构造函数

js函数与构造函数

作者: 扶得一人醉如苏沐晨 | 来源:发表于2021-12-28 10:14 被阅读0次

一、js函数函数

简单的说就是重复执行的代码块。函数是一段JavaScript 代码,它只定义一次,但可能被执行或调用任意次。

1、函数的定义方式:

1)声明式:这种定义的⽅式,⽆论在哪⼉定义,别处都可以调⽤  function fn( ){ };

2)表达式:此时函数作为表达式存在,调⽤只能在定义的后⾯; 解释⼀下表达式:将数据和运算符等联系起来就称为表达式 

 var fn=function () { };

3)以 new 创建函数:解释: Function构造函数所有的参数都是字符串类var fn = new Function (arg1 , arg2 ,arg3 ,…, argN , body )最后⼀个参数, 其余的参数都作为⽣成函数的参数即形参。这⾥可以没有参数。最后⼀个参数, 表⽰要创建函数的函数体。

js 中任意函数都是Function 的实例

3、构造函数介绍

主要⽤来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符⼀起使⽤在创建对象的语句中。

1)⾸先,它是函数,并且任何的函数都可以作为构造函数存在,它的本质是初始化对象。

2)构造:它是创造、设计。将没有的东西先概念实现,⽐如建筑图纸构造函数:

3)构造函数都是和new 关键词⼀起使⽤的。

4)new就是在创建对象,从⽆到有,构造函数就是作用就是为初始化的对象添加属性和⽅法( 成员 )

4、利用构造函数创建对象的方法

1)对象字面量



这种写法的缺点是,每创建⼀个新的对象都需要写出完整的定义语句,不便于创建⼤量相同类型的对象,不利于使⽤继承等⾼级特性。

2)构造函数创建对象(调用构造函数)

使用 new 命令可以调用构造函数,创建实例,并返回这个对象。

new表达式是配合构造函数使⽤的,例如new String(“a string”),调⽤内置的String构造函数构造了⼀个字符串对象。

下⾯我们⽤构造函数的⽅式来重新创建⼀个实现同样功能的对象,

⾸先是定义构造函数,然后是调⽤new表达式创建新对象:

使⽤new操作符来调⽤⼀个构造函数的时候,发⽣了什么呢?其实很简单,就发⽣了四件事

var obj ={}; 

//将构造函数对象的prototype成员对象指向实例

obj.__proto__ =Obj.prototype; 

//设置构造函数体的this指向,让他指向实例

Obj.call(obj); 

//执行函数代码

return obj;

第⼀⾏,创建⼀个空对象obj。

第⼆⾏,将这个空对象的__proto__成员,指向了构造函数对象的prototype成员对象(new为obj 创建一个指针指向 构造函数对象的prototype成员 对象)

第三⾏,将构造函数的作⽤域赋给新对象,因此Obj函数中的this指向新对象obj,然后再调⽤Obj函数。于是我们就给obj对象赋值了

第四⾏,返回新对象obj。当构造函数⾥包含返回语句时情况⽐较特殊,这种情况会在下⽂中说到。

我们最熟悉的Vue实际上就是一个函数,

1)当使用new关键词时,创建一个空对象,

2)new将这个实例的原型指向Vue()的protitype属性,

3)将Vue()函数的this指向实例,执行Vue函数的代码

4)最后return 实例,

5)至此我们获取到一个Vue对象


函数构造可以接收参数,以便初始化实例对象。如果不需要传递参数,可以省略小括号,直接使用 new 命令斯奥用,下面两行代码是等价的。

如果不使用 new 命令,直接使用小括号调用构造函数,

这时构造函数就是普通函数,不会生成实例对象,

this 就代表调用函数的对象,在客户端指代全局对象 window。


为了避免误用,最有效的方法是在函数中启用严格模式。这样必须使用new关键字才能调用

代码如下。

或者使用 if 对 this 进行检测,如果 this 不是实例对象,则强迫返回实例对象。

5.为什么要使⽤构造函数

将新⽣成的对象的_prop_(“prototype” ’ ----指向创建这个对象的函数的显式原型(原型对象prototype))

__prop__属性赋值为构造函数的属性,

这意味着同⼀个构造函数创建的所有对象都继承它的prototype成员对象,使得通过构造函数创建的所有对象可以共享相同的原型,因此它们都是同⼀个类的对象。

该属性在JavaScript标准中,并没有__prop__这个属性,不过它现在已经是⼀些主流的JavaScript执⾏环境默认的⼀个标准属性,⽤于指向构造函数的原型。是默认不可见的,⽽且在各执⾏环境中实现的细节不尽相同,

例如IE浏览器中不存在该属性。

我们只要知道JavaScript对象内部存在指向构造函数原型的指针就可以了,这个指针是在调⽤new表达式的时候⾃动赋值的,并且我们不应该去修改它。

在构造对象的四个步骤中,我们可以看到,除第⼆步以外,别的步骤我们⽆须借助new表达式去实现,因此new表达式不仅仅是对这四个步骤的简化,也是要实现继承的必经之路。

 注意:

当我们定义一个函数的时候,并不知道他是构造函数,即使首字母大写也步行,只有当使用new关键字的时候才能确定

6、构造函数的返回值


构造函数运行使用 return 语句。

如果返回值为简单值 如return 5,则将被忽略,直接返回 this 指代的实例对象;

如果返回值为对象,则将覆盖 this 指代的实例,返回 return 后面跟随的对象。

 没有手动添加返回值,默认返回this


为什么会出现这种情况?这与 new 命令解析过程有关系,使用 new 命令调用函数的解析过程如下:

1)当使用 new 命令调用函数时,先创建一个空对象,作为实例返回。

2)设置实例的原型,指向构造函数的 prototype 属性。

3)设置构造函数体内的 this 值,让它指向实例。

4)开始执行构造函数内部的代码。

5)如果构造函数内部有 return 语句,而且 return 后面跟着一个对象,会返回 return 语句指定的对象;

否则会忽略 return 返回值,直接返回 this 对象。

IE 浏览器对其支持不是很完善,使用时要考虑兼容性。

相关文章

  • 我的JS笔记 -- 类

    JS是没有类的,但JS可以利用构造函数实现近似类的功能。 构造函数 构造函数,是用来创建对象的函数。与普通的函数声...

  • js函数与构造函数

    一、js函数函数 简单的说就是重复执行的代码块。函数是一段JavaScript 代码,它只定义一次,但可能被执行或...

  • 2020-12-15

    js对象的创建和函数 创建对象 工厂模式 构造函数 原型方式+构造函数

  • C# 构造函数总结

    构造函数 构造函数分为:实例构造函数,静态构造函数,私有构造函数。 实例构造函数 1、构造函数的名字与类名相同。 ...

  • 2021-04-15

    Js构造函数、原型、原型链整理 1,普通函数、构造函数区别: 1,名字: 构造函数首字母建议大写,普通函数首字母建...

  • 前端JS进阶二(ES6-Class语法)

    Class和普通构造函数有何区别 前端会使用ES6中的Class来代替JS中的构造函数 JS 构造函数 Class...

  • 三分钟全面了解构造函数

    上篇介绍了js函数三个定义方法:函数声明、函数表达式、以及构造函数;今天具体讲解构造函数; 什么是构造函数 用ne...

  • 箭头函数和普通函数的区别

    定义 变量提升 由于 js 的内存机制,箭头函数需要先定义后调用 构造函数 箭头函数作为匿名函数,不能作为构造函数...

  • js构造函数this指向

    JS里没有类. 构造函数是个函数,this指向的是个对象,this蒙上眼睛指也指不到构造函数去. 构造函数的thi...

  • this-原型

    构造函数 概念 每一个对象都有与之对应的构造函数 一个构造函数可以对应好多个对象 构造是对一类对象的描述 JS的构...

网友评论

      本文标题:js函数与构造函数

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