Is it possible to modify a function itself when its property function is called?

前端 未结 6 1157
遥遥无期
遥遥无期 2021-01-28 13:02

Basically I want to do this:

someFunction() // do something

someFunction.somePropertyFunction()

someFunction()  // Now someFunction is modified; it should now          


        
6条回答
  •  借酒劲吻你
    2021-01-28 13:26

    If your question is whether a function attached as a property to another function has a way to access the function to which it is attached, the answer is no. After all, the same function could be attached to any number of functions of objects.

    So one alternative is to explicitly refer to the "mother" function within the function that is attached to it and intended to change its behavior:

    function f (n) {  alert (n + f.offset); }
    f.offset = 0;
    f.change_offset = function (i) { f.offset = i; };
    
    f (1);                  //1
    f.change_offset (100);
    f (1);                  //101
    

    Here, f is hard-wired into the definition of change_offset. If this bothers you, or you want something slightly more general, write a little routine to set a function as a property on another function, while binding its this to the function being attached to:

    function set_func_as_func_prop ( propname, func_to_set, func_to_set_on ) {
        func_to_set_on[propname] = func_to_set.bind(func_to_set_on);
    }
    

    Now you can write the function more generally

    function change_offset (i) {
        this.offset = i;
    }
    

    and set it on f or any other function.

    set_func_as_func_prop ("change_offset", change_offset, f);
    set_func_as_func_prop ("change_offset", change_offset, g);
    

提交回复
热议问题