js函数之四大调用模式

nianzhilian 2018-03-06 原文

js函数之四大调用模式

一、方法调用模式

当一个函数调用保存为一个对象的属性时我们称之为方法调用。

var myObject = {
            value:0,
            increment:function(inc){
                this.value += typeof inc === 'number' ? inc : 1;
            }
        }
        myObject.increment();
        document.writeln(myObject.value)
        myObject.increment(3);
        document.writeln(myObject.value)

方法可以使用this访问自己所属的对象,所有它能从对象中访问value并修改value属性 当this对象发生在调用的时候  这个超级延时绑定 可以对this高度复用。

二、函数调用模式

var add = function(num1,num2){
            if(typeof num1!=='number' || typeof num2!=='number'){
                throw{
                    name:'error',
                    message:'param is not number'
                }
            }
            return num1 + num2
        }

        myObject.dobule = function(){
            var that = this;
            var helper = function(){
                try {
                    that.value = add(that.value,that.value);
                } catch (e) {
                    document.writeln('name'+e.name+'message'+e.message)
                }
            }
            helper();//函数式调用
        }

        myObject.dobule();
        document.writeln(myObject.value);

 以此模式调用函数时this指的是全局对象,这是语言上设计的一个错误。幸运的是这有一个容易的解决方案 在函数内部定义一个变量赋值this, 那么内部函数就可以通过函数内部的变量访问this。

三、构造器式调用js是基于原型继承的语言 不像其他编程语言是基于类的。但是js也提供了一套和基于类的语言类似的对象构建语法

var Fu = function(str){
            this.name = str;
        }
        //通过原型继承扩展方法
        Fu.prototype.get_name = function(){
            return this.name
        }
        // 模拟构造一个新的对象实例
        var fu = new Fu('张三');
        // 函数式调用方法
        document.writeln(fu.get_name());

 如果创建函数的目的是为了结合new来调用 那它就被称为构造器式调用

四、apply调用模式

var array = [3,4];
var sum = function(){
    try {
                   add.apply(null,array);
                } catch (e) {
                    document.writeln('name'+e.name+'message'+e.message)
                }
}

//函数式调用
document.writeln(sum());

apply用法

发表于 2018-03-06 22:09 nianzhilian 阅读() 评论() 编辑 收藏

 

版权声明:本文为nianzhilian原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/nianzhilian/p/8519475.html

js函数之四大调用模式的更多相关文章

  1. 毕达哥拉斯树(pythagorasTree)原理解析及canvas动画实现

    以前就看到了这个东西,由于太忙了最近才有时间来实现这个; 该文章适合有一定 canvas 基础的人阅读; 首先 […]...

  2. 前端笔记(关于解决打包时报node-sass错误的问题)

    这个问题之前反复出现,试过重新从其他同事将node_modules拿过来用,但是过了几天又出同样的问题   去 […]...

  3. React-代码复用(mixin.hoc.render props)

    React-代码复用(mixin.hoc.render props) 前言 最近在学习React的封装,虽然日 […]...

  4. 前端面试:Http协议与浏览器

    Http与Https的区别 Http是明文传输的,Https协议是在Http协议上添加了SSL的加密协议,可以 […]...

  5. JS中判断对象是不是数组的方法

    JS中判断对象是不是数组的方法 JavaScript中检测对象的方法 1.typeof操作符 这种方法对于一些 […]...

  6. webpack 中,module,chunk 和 bundle 的区别是什么?

    说实话我刚开始看 webpack 文档的时候,对这 3 个名词云里雾里的,感觉他们都在说打包文件,但是一会儿 […]...

  7. AJAX随笔

    写在前面:第一次用到AJAX进行异步调用,所以想写一个文档来整理一下AJAX和所遇到的问题。 1.简单说一下A […]...

  8. js在线调试

    HTML代码在线运行和预览网站:1:http://jsrun.net/Cj2Kp/edit2:https://www.w3school.com.cn/tiy/t.asp?f=html5_audio3:https://jsbin.com...

随机推荐

  1. QuickCut——开源的简单处理视频及字幕、内嵌网站视频下载的工具推荐

    是在码云右侧推荐给我的,感觉这个推荐很给力。 这个工具应该说是比较完善的。 从开发者的角度看,功能基本已经完善 […]...

  2. 从 Int 到 Integer 对象,细细品来还是有不少东西

    int 是 Java 八大原始类型之一,是 Java 语言中为数不多不是对象的东西,Integer 是 int […]...

  3. ACCESS数据库的用途和优缺点

    ACCESS简介  Access 是微软公司推出的基于Windows的桌面关系数据库管理系统(RDBMS,即R […]...

  4. 『动善时』JMeter基础 — 25、JMeter参数化补充练习

    目录 1、使用“CSV数据文件设置”组件实现参数化 (1)测试计划中的元件 (2)数据文件内容 (3)线程组元 […]...

  5. IT从业者疫情之下出路何在

      作为一个IT行业十年经历的从业人员,在北京大公司工作过,但因衡量着北京大都市的繁华下高消费和高房价,选择到 […]...

  6. 《程序人生》2020无畏年少青春,迎风潇洒前行,程序员2019的心路历程,披荆斩棘,雨过天晴

    无畏年少青春,迎风潇洒前行 点赞再看,养成习惯 本文 GitHub https://github.com/Ja […]...

  7. 目标检测中的IOU

    IOU是指两个bounding box的重合程度。  其中矩形框A和B的IOU=A∩B/A∪B,实际运算是对应 […]...

  8. AltiumDesigner PCB导入CAD

    点击File菜单下的New的PCB,新建PCB文件。   在AD09中点击File菜单下的Import,导入C […]...

展开目录

目录导航