0

0

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

不言

不言

发布时间:2019-03-18 11:38:39

|

2145人浏览过

|

来源于segmentfault

转载

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

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

callee

function fact(num){
        if(num<=1){
        return 1;
        }else{
        return num*fact(num-1);
        }
    }

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

采用callee实现如下

function fact(num){
            if(num<=1){
            return 1;
            }else{
            return num*arguments.callee(num-1);
            }
        }

this

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

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

立即学习Java免费学习笔记(深入)”;

方法调用

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

例如:

var myNum = {
      value:1,
      increment:function(arg){
          this.value +=arg;

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

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

WeShop唯象
WeShop唯象

WeShop唯象是国内首款AI商拍工具,专注电商产品图片的智能生成。

下载

函数调用

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

// 一般的函数
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绑定到该对象

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到指定的环境对象

 
 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在箭头函数里使用时是一个不变的值

function foo(){
    setTimeout(()=>{
        console.log('name:',this.name);
    },1000)
}
var name = "kiki";
foo.call({name:"didi"});//name:didi

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

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

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

17

2026.01.23

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

22

2026.01.23

yy漫画官方登录入口地址合集
yy漫画官方登录入口地址合集

本专题整合了yy漫画入口相关合集,阅读专题下面的文章了解更多详细内容。

91

2026.01.23

漫蛙最新入口地址汇总2026
漫蛙最新入口地址汇总2026

本专题整合了漫蛙最新入口地址大全,阅读专题下面的文章了解更多详细内容。

124

2026.01.23

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

14

2026.01.23

php远程文件教程合集
php远程文件教程合集

本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

65

2026.01.22

PHP后端开发相关内容汇总
PHP后端开发相关内容汇总

本专题整合了PHP后端开发相关内容,阅读专题下面的文章了解更多详细内容。

59

2026.01.22

php会话教程合集
php会话教程合集

本专题整合了php会话教程相关合集,阅读专题下面的文章了解更多详细内容。

61

2026.01.22

宝塔PHP8.4相关教程汇总
宝塔PHP8.4相关教程汇总

本专题整合了宝塔PHP8.4相关教程,阅读专题下面的文章了解更多详细内容。

33

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.4万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号