我想知道是否可以在两个单独的javascript文件之间使用共享范围的变量,但不能在引用这些javascript文件的根文档中。
例如,如果我想在页面加载时拥有一个包含html元素大小信息的变量,我可以这样做......
在root(index.html)文档中,我可以声明变量并为其赋予全局范围:
<script>
var elemWidth;
</script>
<script src="first.js"></script>
<script src="second.js"></script>
在第一个javascript文件(first.js)中:
var elem = document.getElementById('myElem');
elemWidth = elem.style.width;
在另一个javascript文件(second.js)中:
var someDynamicValue = n; /* where 'n' is an integer that is given a calculated value */
if(elemWidth > someDynamicValue) { ... }
使用上述约定,可以在所有三个文档(index.html,first.js,second.js)中访问变量elemWidth
。但是,如果出于某种原因,我不希望在根文档(index.html)中访问该变量,该怎么办?我只希望它在两个.js文件中可访问和操作。毕竟,在根文档(index.html)中确实不需要它,我不一定需要在其他.js文件中(例如third.js)。
某些可能性已经来到我身边,但它们似乎都在某个时刻崩溃了:
除此之外,我对这个问题感到困惑。在这个时候,我没有特定的理由需要这个功能,但我可以想象它在某些情况下是有用的(即额外的安全性,隔离变量值),当然,我很好奇,想要学习一些东西关于JS&amp; amp;通过这个例子OOP。
也许这在JavaScript中是不可能的 - 如果是这样,请解释原因:)
更新:我想扩展使用对象原型继承来实现这个结果的想法。如果我们声明一个类构造函数,例如:
function ancestorObj() {
var privateVar = 'secret';
}
然后用另一个构造函数扩展这个原型:
function inheritedObj() {
this.getSecret = function() {
return privateVar;
}
}
inheritedObj.prototype = new ancestorObj();
我们现在创建了一个对象类构造函数,它是ancestorObj
的继承实例,它包含一个返回原型对象私有属性的getter方法。默认的类构造函数不包含getter方法。接下来的逻辑是只有inheritedObj
的实例才能获得此私有属性的值。那么我们是否可以仅在需要时声明inheritedObj
的实例(即'first.js'和'second.js'),从而限制privateVar
属性的范围?
同样,OOP不是我的强项,所以这可能很容易被驳回,因为不可能或不正确。如果是这样,请解释原因。
答案 0 :(得分:4)
最终,您无法做任何事情来使符号完全专用于从单独的<script>
块导入的两个代码单元。这些代码可以拥有的唯一关系是通过全局符号,如果两个脚本中的代码可以找到你的&#34;私有&#34;属性,任何其他代码也可以。
可能最好的做法是将其保留为您声称的某个全局命名空间的属性,或者保存在您已经使用的属性(如框架)之下。
答案 1 :(得分:3)
在你的情况下,它将它包装成像$.fn.methodName = function { var leaveMeAlone = true; };