【发布时间】:2013-03-05 18:37:39
【问题描述】:
在我的构造函数中,我订阅了另一个类函数。如何从订阅中调用类方法 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", "");
});
我得到了这个工作 -
/// <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 在这里:
/// <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();
});
}
谢谢。 书呆子
【问题讨论】:
-
如果
Portfolio是使用new调用的,那么您现在正在执行此操作。 -
我得到对象不支持属性或方法
-
所以你是说你确实使用了
new?如果是这样,那么您在MemPortfolio.Portfolio.prototype.Show = function () {代码有机会运行之前调用它。 -
看起来对吗?有什么问题?
-
你真的需要为我们把它们放在一起。无法知道代码运行的顺序。给定正确的执行顺序,您的代码可以正常工作:jsfiddle.net/LVnqw
标签: javascript prototype publish-subscribe