Crockford的实体化方法 - 为什么关闭?

时间:2015-07-24 15:28:26

标签: javascript

在Crockford的JavaScript:The Good Parts的第90页,他的代码有以下内容:

<!DOCTYPE HTML>
<html>
<head>
<meta name="viewport" content="width=320; user-scalable=no" />
<meta http-equiv="Content-type" content="text/html; charset=utf-8">


     <script type="text/javascript" charset="utf-8" src="phonegap-1.3.0.js"></script>
     <script type="text/javascript" src="cordova.js"></script>
     <script type="text/javascript" charset="utf-8">
        var statusdiv;

        var drawStatus = function(info){
            var s = "<p><b>Battery Status</b><br/>";
            s += "Level is "+info.level + "<br/>";
            s += "Plugged in is "+info.isPlugged;
            s += "</p>";
            statusdiv.innerHTML = s;
        };

    var battCrit = function(info) {
            navigator.notification.alert("Your battery is SUPER low!");
            drawStatus(info);
        };

    var battLow = function(info) {
            navigator.notification.alert("Your battery is low!");
            drawStatus(info);
        };

    var battStat = function(info) {
            drawStatus(info);
        };
     var onDeviceReady = function() {
            //listen for battery events
            window.addEventListener("batterycritical", battCrit, false);
            window.addEventListener("batterylow", battLow, false);
            window.addEventListener("batterystatus", battStat, false);
};

function init() {
document.addEventListener("deviceready", onDeviceReady, true);
            statusdiv = document.getElementById("status");
} 
     </script> 
</head>


<body onload="init();">

<h2>Battery Tester</h2>

    <div id="status"></div>

</body>
</html>

是否有充分的理由关闭并立即调用外部函数?以下似乎也有效:

String.method('entityify', function(){

  var character = {
    '<': '&lt;',
    '>': '&gt;',
    '&': '&amp;',
    '"': '&quot;'
  };

  return function(){
    return this.replace(/[<>&"]/g, function(c){
      return character[c];
    });
  };
}());

console.log("<&>".entityify());

1 个答案:

答案 0 :(得分:9)

通过这样做,他创建了character对象一次并重新使用它。通过编辑,您每次都可以重新创建它。你可以用任何一种方式来论证,但这就是区别。他使用 小数 更多内存。你的每次调用需要更长时间 (可能,取决于创建对象的时间是否超过他的额外范围遍历步骤;但它可能会这样做)。在任何情况下,它都不可能是你在现实世界中注意到的任何东西。