我收到以下错误:未定义SyncNavigationSetCssToState
$(function () {
var NavigationSetApi = {
SyncNavigationSetCssToState: function (navigationSet) {
var navigationSetContent = navigationSet.find(".navigation-set-content");
var navigationSetHeaderButton = navigationSet.find(".navigation-set-header-button");
if (navigationSetContent.is(":visible"))
navigationSetHeaderButton.removeClass("closed").addClass("open");
else
navigationSetHeaderButton.removeClass("open").addClass("closed");
},
GetAllNavigationSets: function () {
return $(".navigation-set");
},
SyncAllNavigationSetCssToState: function () {
this.GetAllNavigationSets().each(function () {
SyncNavigationSetCssToState($(this));
});
}
}
NavigationSetApi.SyncAllNavigationSetCssToState();
}
我不知道如何从SyncNavigationSetCssToState的each()函数中访问SyncNavigationSetCssToState。我如何从这里引用主api对象?
最佳答案
调用this
时引用的是SyncNavigationSetCssToState
将呼叫替换为NavigationSetApi.SyncNavigationSetCssToState
$(function () {
var NavigationSetApi = {
SyncNavigationSetCssToState: function (navigationSet) {
var navigationSetContent = navigationSet.find(".navigation-set-content");
var navigationSetHeaderButton = navigationSet.find(".navigation-set-header-button");
if (navigationSetContent.is(":visible"))
navigationSetHeaderButton.removeClass("closed").addClass("open");
else
navigationSetHeaderButton.removeClass("open").addClass("closed");
},
GetAllNavigationSets: function () {
return $(".navigation-set");
},
SyncAllNavigationSetCssToState: function () {
this.GetAllNavigationSets().each(function () {
NavigationSetApi.SyncNavigationSetCssToState($(this));
});
}
}
NavigationSetApi.SyncAllNavigationSetCssToState();
}
正在扩展有关实例的评论...
上面只是一个简单的Javascript对象。
this
引用对象NavigationSetApi
以使其简单。但是当您呼叫this.GetAllNavigationSets().each
时,each
现在通过使用Function.prototype.call设置this
如果要使用
NavigationSetApi
作为实例,则首先需要使其成为一个函数(如果您知道任何OO语言都想到了一个类)这是定义它的方式:
function NavigationSetApi(){
}
NavigationSetApi.prototype = {
SyncNavigationSetCssToState: function (navigationSet) {
var navigationSetContent = navigationSet.find(".navigation-set-content");
var navigationSetHeaderButton = navigationSet.find(".navigation-set-header-button");
if (navigationSetContent.is(":visible"))
navigationSetHeaderButton.removeClass("closed").addClass("open");
else
navigationSetHeaderButton.removeClass("open").addClass("closed");
},
GetAllNavigationSets: function () {
return $(".navigation-set");
},
SyncAllNavigationSetCssToState: function () {
//From Blake Simpson's answer
var api = this;
this.GetAllNavigationSets().each(function () {
api.SyncNavigationSetCssToState($(this));
});
}
};
然后调用它,您将使用
var instanceApi = new NavigationSetApi();
instanceApi.SyncAllNavigationSetCssToState();
在这种情况下,您要设置对象的原型,然后在使用
new
创建对象时将该对象“应用于”实例有趣的是,您还可以将事物添加到大多数事物的原型中,例如String或Date
例:
String.prototype.logAWord = function(word){
console.log(word);
};
// "" is an instance of String
// Logs "Hello"
"".logAWord("Hello");