请不要将我指向Static variables in JavaScript
我的问题更具体。我是JS的新手(请读几本书,看一些屏幕录像,并阅读有关JS中monoins / monad的博客文章),请耐心等待)
为了存储可重用的常量,我编写了以下代码:
函数SVGobj(w,h){
this.value = document.createElementNS(SVGobj.svgNS,“ svg”);
this.value.setAttribute(“ version”,“ 1.2”);
this.value.setAttribute(“ width”,w);
this.value.setAttribute(“ height”,h);
}
SVGobj.svgNS =“ http://www.w3.org/2000/svg”;
函数SVGCircle(cx,cy,r){
this.value = document.createElementNS(SVGobj.svgNS,“ circle”);
this.value.setAttribute(“ cx”,cx);
this.value.setAttribute(“ cy”,cy);
this.value.setAttribute(“ r”,r);
}
上面的代码正在工作。 SVGCircle重用常量SVGobj.svgNS。
但是我不明白SVGobj.svgNS =表达式。
这是根据JS规范合法使用JS表达式的吗?
请注意,这样的代码将失败:
var SVGobj = {};
SVGobj.svgNS =“ http://www.w3.org/2000/svg”;
函数SVGobj(w,h){
this.value = document.createElementNS(SVGobj.svgNS,“ svg”);
this.value.setAttribute(“ version”,“ 1.2”);
...
}
....
错误:
TypeError:SVGobj.prototype未定义
当我尝试实例化新的SVGobj(320,240);
为什么?
我可以由新运算符创建对象,但可以从“ var Cls = {};”开始表达?
有人建议使用:
函数SVGobj(w,h){
如果(typeof SVGobj.svgNS =='undefined'){
SVGobj.svgNS =“ http://www.w3.org/2000/svg”;
}
....
}
为什么每次创建对象时都使用评估结果?我的第一个例子对我来说似乎更自然。
最佳答案
但是我不明白SVGobj.svgNS =表达式。合法使用
根据JS规范的JS表达式?
是的,SVGobj是一个函数,而svgNS是该函数的属性。
当我尝试实例化新的SVGobj(320,240);为什么?
是名称冲突。
var SVGobj = {};
SVGobj.svgNS =“ http://www.w3.org/2000/svg”;
被以下内容覆盖:
函数SVGobj(w,h){
this.value = document.createElementNS(SVGobj.svgNS,“ svg”);
this.value.setAttribute(“ version”,“ 1.2”);
...}
不要忘了Javascript不是面向对象的语言。
我可以通过新运算符创建对象,但可以从“ var Cls = {};”开始
表达?
此表达式等于({}仅是捷径)
var Cls = new Object();
为什么每次创建对象时都使用评估结果?我的第一次
这个例子对我来说似乎更自然...
第一个示例比if解决方案更好,但是代码可能更简洁。(但始终可以。;-)
关于javascript - 在JavaScript中的 namespace 中存储可重用常量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14314868/