0

オブジェクトの init 関数から bindEvent 関数に変数を渡す方法がわかりません。現在、未定義になっています。

var Fisheye = {
    init: function () {

        $('body').hide();

        $(window).load(function() {
            $('body').fadeIn('slow');

            this.imgs = $('.pic').children('img');
            this.originalWidth = $(imgs).first().css('width');
            this.minWidth = 300;

            imgs.width(300);

            Fisheye.bindEvents();

        });

    },

    bindEvents: function() {
        $(this.imgs).toggle(this.toggleClick, this.toggleClick);
        console.log(this.imgs); // Why do I get Undefined here?
    },

    toggleClick: function() {
        //Todo
    }
}


Fisheye.init();

オブジェクト内の関数から別の関数に変数を適切に渡す方法は?

ありがとう!

4

2 に答える 2

1

あなたはこれを行うことができます :

var Fisheye = {

    init: function () {
        var _this = this;
        $('body').hide();
        $(window).load(function() {
            $('body').fadeIn('slow');
            _this.imgs = $('.pic').children('img');
            _this.originalWidth = $(_this.imgs).first().css('width');
            _this.minWidth = 300;
            _this.imgs.width(300);
            _this.bindEvents();
        });

    },

    bindEvents: function() {
        $(this.imgs).toggle(this.toggleClick, this.toggleClick);
    },

    toggleClick: function() {
        //Todo
    }
}


Fisheye.init();

問題は、ハンドラーの「this」が FishEye のインスタンスではなく、ウィンドウであったことです。

しかし、toggleClick でも同様の問題が発生します。それらの解決策は、これを行うことです:

bindEvents: function() {
    var _this = this;
    var toggleFunction = function(){_this.toggleClick()};
    $(this.imgs).toggle(toggleFunction, toggleFunction);
},
于 2012-06-02T09:59:52.550 に答える
0

構造体だけをすばやく、関数に param を追加します

 bindEvents: function(imgs) {
    $(imgs).toggle(this.toggleClick, this.toggleClick);
    console.log(imgs); // Why do I get Undefined here?
},...

初期化関数について

...
var imgs = ..
Fisheye.bindEvents(imgs);
于 2012-06-02T10:13:38.263 に答える