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"
  • 相关阅读:
    4.1.7 POD对象
    异常处理
    POJ3167 Cow Patterns [KMP]
    POJ1961 Period [KMP应用]
    POJ2778 DNA Sequence [AC自动机+矩阵]
    HDU2243 考研路茫茫——单词情结 [AC自动机+矩阵]
    POJ2185 Milking Grid [KMP应用]
    POJ2541 Binary Witch [状态压缩]
    ZOJ3430 Detect the Virus [AC自动机]
    POJ2752 Seek the Name, Seek the Fame [KMP]
  • 原文地址:https://www.cnblogs.com/boluoboluo/p/6855612.html
Copyright © 2011-2022 走看看