JavaScript函数内部属性的介绍(附示例)


本文摘自PHP中文网,作者不言,侵删。

本篇文章给大家带来的内容是关于JavaScript函数内部属性的介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

函数内部有两个特殊对象,this、arguments,其中arguments是一个类数组对象,包含着传入函数中的所有参数,主要用来保存函数参数。arguments对象还有一个callee属性,callee是一个指针,指向拥有这个arguments对象的函数。

callee

1

2

3

4

5

6

7

function fact(num){

        if(num<=1){

        return 1;

        }else{

        return num*fact(num-1);

        }

    }

这是一个实现阶乘的函数,采用递归的方式,这种方式存在一个问题就是,当fact的名称更改以后,如果不及时更改函数内部的函数名称,该函数则无效。此时采用callee属性替代当前拥有num参数对象的函数也就是fact.

采用callee实现如下

1

2

3

4

5

6

7

function fact(num){

            if(num<=1){

            return 1;

            }else{

            return num*arguments.callee(num-1);

            }

        }

this

this引用的是函数执行的环境对象,当函数被当做某个对象的方法调用时,此时的this对象引用的是当前调用函数的对象。

不同的环境this指向的值不同,下面是几种this在不同执行环境下所指向的值

方法调用

当函数作为对象方法的时候,函数里的this被绑定到当前对象上(也可以称之为方法调用)

例如:

1

2

3

4

5

6

7

8

9

var myNum = {

      value:1,

      increment:function(arg){

          this.value +=arg;

 

      }

  };

   myNum.increment(3);

  console.log('example1:'+myNum.value);//example1:4

上述的increment是一个对象方法,该对象方法内部的this指向的就是当前对象

函数调用

当函数作为非对象方法时候,this绑定到全局对象window,如果此时要调用内部函数可以采用that = this。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

// 一般的函数

function add(a){

    return a+2 ;

}

 

var value = 2;

myNum.count = function (){

    let value = 1;

    let help = function(){

        this.value = add(this.value);

    }

    help();

    console.log(this.value);//4

}

myNum.count();

 

 

that = this方式

 

var value = 2;

myNum.count = function (){

    let value = 1;

    let that = this;

    let help = function(){

        that.value = add(that.value);

    }

    help();

    console.log(that.value);//3

}

myNum.count();

构造函数

用new运算符调用构造函数,会先创建一个连接到构造函数的prototype(原型对象),再将this绑定到该对象

1

2

3

4

5

6

7

8

9

10

function Person(name){

    this.name = name;

}

 

Person.prototype.sayName = function(){

    return this.name;

}

var person1 = new Person('TOM');

 

console.log(person1.sayName());

apply\call\bind

绑定this到指定的环境对象

1

2

3

4

5

6

var people = {

    name:"LILY"

}

console.log(Person.prototype.sayName.apply(people));

console.log(Person.prototype.sayName.bind(people)());

console.log(Person.prototype.sayName.call(people));

call :方法调用一个具有给定this值的函数,以及提供的参数列表。
apply: 方法调用一个具有给定this值的函数,以及提供的参数(数组或类数组对象)。
bind :方法创建一个新的函数,调用时设置this关键字为提供的“值”。

ES6 箭头函数

es6箭头函数里的this指向定义时所在的对象,不是执行的环境对象,就说明this在箭头函数里使用时是一个不变的值

1

2

3

4

5

6

7

function foo(){

    setTimeout(()=>{

        console.log('name:',this.name);

    },1000)

}

var name = "kiki";

foo.call({name:"didi"});//name:didi

箭头函数里this的值指向的是定义时所在的环境对象,es5中实现箭头函数的方法:采用 that = this这种机制,实现this的绑定

以上是对函数的内部属性的理解。

以上就是JavaScript函数内部属性的介绍(附示例)的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

如何使用canvas画出平滑的曲线?(代码)

js 闭包的作用是什么?

javascript中var、let和const之间有什么区别?

vue.js的ul-li标签仿select标签

javascript怎么设置全选

javascript有什么用

使用canvas实现迷宫游戏

javascript如何获取用户输入的值

javascript alert函数显示中文乱码怎么办

javascript怎么实现字幕滚动

更多相关阅读请进入《javascript》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...