如何将非文字添加到像 jQuery 这样的变量中?

How to add non-literal into a variable like jQuery?

在JQuery代码的最后部分jQuery变量赋值给一个$符号:

// Expose jQuery and $ identifiers, even in
// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
// and CommonJS for browser emulators (#13566)
if ( typeof noGlobal === strundefined ) {
 window.jQuery = window.$ = jQuery;
}

现在我正在制作自己的名为 ezo 的框架,它通过 JavaScript 文件使用 id 和程序 CSS 促进 DOM 的快速操作,而不必制作 CSS文件和代码更友好。

我在 ezo 中做了与 JQuery 相同的操作(带有完整的演示代码):

var ezo = function(selector) {
  var dom = document.getElementById(selector);

  dom.setText = function(string) {
    dom.innerText = string;
  };

  dom.appendText = function(string) {
    dom.innerText = dom.innerText + string;
  };

  dom.setSize = function(width, height) {
    $(selector).css("width", width);
    $(selector).css("height", height);
  };

  dom.setBGColor = function(color) {
    $(selector).css("background-color", color);
  };

  dom.setFontSize = function(size) {
    $(selector).css("font-size", size);
  }

  dom.setFontColor = function(color) {
    $(selector).css("color", color);
  }

  dom.align = function(al) {
    $(selector).css("text-align", al);
  };

  dom.getNodeName = function() {
    return $(selector)[0].nodeName;
  };

  return document.getElementById(selector);

};

$(document).ready = function() {

  window.ezo = window.# = ezo;

};

然后我在 html 文件上测试了我的框架来操作节点:

<!DOCTYPE html>
<html>

<head>
  <title>Ezo Test</title>
  <link rel="stylesheet" href="stylesheet.css" />
  <script src="jquery-1.11.2.js"></script>
  <script src="ezo-1.0.js"></script>
  <script src="script.js"></script>
</head>

<body>
  <h1 id="header"> This is a header! Edit Me </h1>
  <p id="par">I'm a lovely paragraph!</p>
  <div id="box">
    <p id="par2">I'm an empty div !</p>
  </div>
</body>

</html>

在我 运行 html 文件之后,JS 控制台警告我 # 是非法标记!我怎样才能使#成为像ezo这样的变量而不会像JQuery的$符号那样出现这个错误?

How can I make # as a variable like ezo without having this error just like JQuery's $ sign?

你不能。 # 不是有效的 IdentifierName character$ 是。变量和 属性 名称文字必须仅包含有效的 IdentifierName 字符。 (还有更多,因为第一个字符有额​​外的要求,但请参阅 link 了解详细信息。)基本上只有两个非字母字符可以用于变量的开头或 属性 姓名,$_。两者都已被知名图书馆使用。 :-)

虽然您可以使用括号符号和引号创建window 属性:

window["#"] = ...

...这显然使用起来很尴尬,因为你必须在所有地方写 window["#"](不仅仅是 #)。 :-) 或者当然,您可以选择任何您喜欢的英文字母,真的,只是警告人们它是什么,但这可能不会流行。或者选择一个非英语字母,例如 Ω,但是 A) 这在希腊可能不流行,并且 B) 在大多数键盘上打字会很尴尬。

更现实的选择:

  • ezo 很短而且很容易打字,你可以直接使用它。
  • 或者您可以使用 $,假设使用您的框架的人不会使用 jQuery(或者如果他们使用,他们可以使用 jQuery 的 noConflict).
  • $$(PrototypeJS也使用过,但除了遗留代码库外,它不再被广泛使用)
  • _e
  • 或其他一百万件事中的任何一个...

JavaScript 对象名称必须以 Unicode 字母或下划线 _、美元符号 $ 开头。这就是语言的定义方式。 jQuery 已经将 $ 殖民化,并且 underscore.js 等各种图书馆都拥有对 _ 的优先权。我会选择包含两个或更多字符的内容,例如 $e 或 $z。