如果大部分 context 是相似的,你可以考虑写一个 create 函数来为不同的对象创建 context。
给你举个例
HTML
<ul>
<li id="li1">第1行</li>
<li id="li2">第2行</li>
<li id="li3">第3行</li>
<li id="li4">第4行</li>
<li id="li5">第5行</li>
</ul>
JavaScript
如果给某个 li 添加右键菜单是这样
context.attach("#li1", {
text: "菜单项",
action: function(e) {
alert("menu for #li1")
}
})
但问题是要给每个都加,所以用一个 builder 函数
// 写个 builder 函数
function attachContext(selector) {
context.attach(selector, {
text: "菜单项",
action: function(e) {
alert("menu for " + selector)
}
})
}
// 然后给每个 li 加菜单
$("li[id]").each(function() {
var id = $(this).prop("id")
attachContext("#" + id)
})
总结:把每个菜单不同的地方提取出来作为 builder 的参数传入,包括附加到的DOM对象本身也作为参数,就可以在 action 中自由处理了
执行上下文有 三种 类型:
执行上下文也是一个对象!那么这个对象中包括了哪些内容呢
每一个 执行上下文都包括三个属性:
存储执行上下文的数据结构是堆栈,它是一种先进后出的数据结构, 称其为 执行栈 。
1.当js引擎首次读取读取脚本时,便会创建一个全局执行上下文,并将其压入栈底,
我们假设一开始的上下文执行栈为 []