Javascript Prototype pub子方法超出作用域

Javascript Prototype pub sub method out of scope

本文关键字:作用域 子方法 Prototype pub Javascript      更新时间:2023-09-26

在构造函数中,我订阅了另一个类函数。如何从订阅中调用类方法show

var MemPortfolio = MemPortfolio || {};
MemPortfolio.Portfolio = function (contentid, thumbclass, featuredid) {
    this.thumbClass = thumbclass;
    this.featuredId = "#" + featuredid;
    var that = this;
    //subscribe to menutile click
    $.subscribe("/menutile/click/portfolio", function (tilename) {
        that.Show();
    });
};
MemPortfolio.Portfolio.prototype.Show = function () {
    alert("show");
}

在我的文档准备好了://////

$(document).ready(function () {
    //check exists?
    var tilemenu = new MemTileMenu.Menu("menu", "menuitem", "contentarea");
    var portfolio = new MemPortfolio.Portfolio("contentarea", "thumb", "");
});

I got this working -

/// <reference path="jquery-1.7.1.js" />
/// <reference path="jquery.ba-tinypubsub.js" />
var MemPortfolio = MemPortfolio || {};
MemPortfolio.Portfolio = function (contentid, thumbclass, featuredid) {
    this.thumbClass = thumbclass;
    this.featuredId = "#" + featuredid;    
};
MemPortfolio.Portfolio.prototype = {
    show: function () {
        alert("show");
    },
    subscribe: function () {
        var that = this;
        $.subscribe("/menutile/click/portfolio", function (tilename) {
            that.show();
        });
    }

医生。准备好了:

/// <reference path="tilemenu.js" />
/// <reference path="portfolio.js" />
$(document).ready(function () {
    //check exists?
    var tilemenu = new MemTileMenu.Menu("menu", "menuitem", "contentarea");
    var portfolio = new MemPortfolio.Portfolio("contentarea", "thumb", "");
    portfolio.subscribe();
});
    }

谢谢。NerdPerson

尝试将MemPortfolio.Portfolio.prototype替换为MemPortfolio.prototype.Portfolio

可以。

  /// <reference path="jquery-1.7.1.js" />
    /// <reference path="jquery.ba-tinypubsub.js" />
    var MemPortfolio = MemPortfolio || {};
    MemPortfolio.Portfolio = function (contentid, thumbclass, featuredid) {
        this.thumbClass = thumbclass;
        this.featuredId = "#" + featuredid;    
    };
    MemPortfolio.Portfolio.prototype = {
        show: function () {
            alert("show");
        },
        subscribe: function () {
            var that = this;
            $.subscribe("/menutile/click/portfolio", function (tilename) {
                that.show();
            });
        }
    Doc.Ready here:
    /// <reference path="tilemenu.js" />
    /// <reference path="portfolio.js" />
    $(document).ready(function () {
        //check exists?
        var tilemenu = new MemTileMenu.Menu("menu", "menuitem", "contentarea");
        var portfolio = new MemPortfolio.Portfolio("contentarea", "thumb", "");
        portfolio.subscribe();
    });
        }