0
define(function () {
    var fn;
    
    function setHeight(obj) {
        fn = $(obj).height; // jQuery 的 height() 方法
        
        fn(); // 如果这么调用的话 this 就指向了全局
    }
    
    function reduction() {
        fn(); // 如果这么调用的话 this 就指向了全局
    }
    
    return {
        init: setHeight
    };
});

存成变量 调用时是在全局环境 this 默认指向 window 然而这并不是我想要的~

js 的 this 问题没少被吐槽 这是语言的设计问题吗 在别的语言上有这样的特征吗?~

我怎么做到把 $(obj) 这个对象上的 height 方法存起来 这样的话如果后续要把 height 方法修改成 outerHeight 直接改一处就可以了 而且也不用每次去查对象原型链上的 height 了 对于这种重复用在好多地方的东西大家都是怎么处理的~

查看全部 5 个回答

0

首先来说,javascript的设计并没有问题。比如以下代码:

Foo.method = function() {
  console.log(this);

  function test() {
    console.log(this);
  }
}

非use strict模式下

第一个console的this指向的是它function对应的对象Foo,输出的当然是Foo这并没有错。第二个console的this指向的还是它的function,只不过这回不是Foo而是test的基对象window,相当于:

window.test = function() {
    console.log(this);
}

输出的内容当然是window毋庸置疑。

比如你上面贴的代码, var fn 为一个function,相当于在window上临时创建一个fn变量,fn里面的this当然会指向window没有任何异议。

总的来说,吐槽this的都是因为这个东西没有实质的理解。多看看书吧

推荐答案

4

可以这样

fn = function(){
    return $(obj).height();
}

或者这样
fn = $(obj).height.bind($(obj));

1

这里是方法的bind,属于原生js的

UKer · 2月17日

展开评论