zoukankan      html  css  js  c++  java
  • bind函数详解(转)

    var name = "The Window";
    var object = {
        name: "My Object",
        getNameFunc: function () {
            return function () {
                return this.name;
            }
        }
    };
    
    alert(object.getNameFunc()()); //"The Window"

    object.getNameFunc()返回一个匿名函数,在全局环境调用该函数,this指向的全局对象

    解决这一问题,可以像下面这样,将匿名函数外部作用域中this对象保存在闭包能够访问到的变量中

    var name = "The Window";
    var object = {
        name: "My Object",
        getNameFunc: function () {
            var that = this;
            return function () {
                return that.name;
            }
        }
    };
    
    alert(object.getNameFunc()()); //"My Object"

    上述解决方法需要修改对象的方法,如果不能修改原对象的方法,该如何做呢?

    这时,我们可以像下面这样,使用apply或call方法指定函数的作用域

    var name = "The Window";
    var object = {
        name: "My Object",
        getNameFunc: function () {
            return function () {
                return this.name;
            }
        }
    };
    var func=object.getNameFunc();
    alert(func.apply(object)); //"My Object"

    通过apply、call,已经可以输出预期的My Object

    但是,每次调用时都需要以func.apply(object)的形式调用,这不是很怪么

    理想的调用方式,当然是在通过某种处理后,之后可以以func()形式调用,像下面这样

    var name = "The Window";
    var object = {
        name: "My Object",
        getNameFunc: function () {
            return function () {
                return this.name;
            }
        }
    };
    var func=object.getNameFunc();
    func=func.bind(object);
    alert(func()); //"My Object"
  • 相关阅读:
    线上项目部署
    day26 面向对象 单例模式总结
    阿里云服务器,更换操作系统步骤总结
    后端for循环补充
    前端,css
    django-admin 仿写stark组件action,filter筛选过滤,search查询
    7.20晚作业
    用户和群组管理
    7.19 晚作业
    目录和文件管理
  • 原文地址:https://www.cnblogs.com/boluoboluo/p/6855612.html
Copyright © 2011-2022 走看看