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 了 对于这种重复用在好多地方的东西大家都是怎么处理的~
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
可以这样
或者这样
fn = $(obj).height.bind($(obj));兄弟,你对this的了解太少了,你看的这个资料,怎么说呢,误人子弟吧。
给你推荐一篇我的文章,读懂了回过头来思考你的问题,就会发现不是问题了。
前端基础进阶:全方位解读this
一种简单的方式来解决你的问题。
更好的方式是改变你的模块设计,你的模块应该是一个类,然后通过 new xxx(obj)来创建对象。
你的
fn可以返回this.height()。这样调用的时候,不论是$(object),还是啥别的东西,永远都是得到调用者的.height()首先来说,javascript的设计并没有问题。比如以下代码:
非use strict模式下
第一个console的this指向的是它function对应的对象Foo,输出的当然是Foo这并没有错。第二个console的this指向的还是它的function,只不过这回不是Foo而是test的基对象window,相当于:
输出的内容当然是window毋庸置疑。
比如你上面贴的代码, var fn 为一个function,相当于在window上临时创建一个fn变量,fn里面的this当然会指向window没有任何异议。
总的来说,吐槽this的都是因为这个东西没有实质的理解。多看看书吧