• JavaScript Advanced


    # Source Map

    It's a way to map a combined/minified file back to an unbuilt state.

    Reference:

    [Introduction to JavaScript Source Map](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/)

    # //@ sourceURL=filename.js

    ----------------------------------------------------------

    heating with eval() and //@ sourceurl

    Back in the day, a feature in Firebug that I copied into Web Inspector was "sourceURL" support, described in "Give your eval a name with //@ sourceURL". I recently made use of this in my "unminified" version of the injected target weinre script. weinre ships with two versions of the code that gets injected into the target: target-script.js and target-script-min.js. The "min" version is what you should be using for typical weinre debugging, the non-"min" version is what I use when debugging the debugger.

    The file target-script-min.js contains gently minized JS files, just concatenated together. The target-script.js file is a bit different. For every JS file, it adds a "//@ sourceurl" comment to the bottom of the file, converts the script content to a string with JSON.stringify(), and then writes an eval([that string here]) to the concatenated file.

    The difference between debugging these in a browser which supports sourceurl is night and day. Try it: after visiting these pages, open your web debugger and look at the scripts which are loaded. Note, this works on Google Chrome 16.0.912.36 beta on a Mac (and likely other versions).

    ----------------------------------------------------------

    References:

    [Give your eval a name with //@ sourceURL ](http://blog.getfirebug.com/2009/08/11/give-your-eval-a-name-with-sourceurl/)

    [Introduction to JavaScript Source Map](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/)

    # CoffeScript --> JavaScript

    CoffeeScript的目的在于为引入JavaScript Good Parts提供一种途径,我们可以利用CoffeeScript JavaScript Compiler将CoffeeScript编译成JavaScript代码。

     <textarea id="code">square = (x) -> x * x
    cube   = (x) -> square(x) * x
    
    alert cube(5)</textarea>
      <label>Name your code:</label>
      <input type="text" placeholder="Coffeeeeeeee!" id="evalName" />
      <button id="compile">Compile</button>
      <script>
        var code = document.getElementById("code"),
            compile = document.getElementById("compile"),
            evalName = document.getElementById("evalName");
        
        compile.onclick = function(e) {
            var coffee = CoffeeScript.compile(code.value)+ "//@ sourceURL=" + (evalName.value || "Coffeeeeeeee!");
            
            eval(coffee);
        }
      </script>

        - CoffeeScript

    square = (x) -> x * x
    cube   = (x) -> square(x) * x
    
    alert cube(5)

        - JavaScript:

    (function() {
    var cube, square;
     
    square = function(x) {
    return x * x;
    };
     
    cube = function(x) {
    return square(x) * x;
    };
     
    alert(cube(5));
     
    }).call(this);
    //@ sourceURL=f

       - How to Compile and Evaluate

          它的作用在于将CoffeeScript代码编程成JavaScript代码,然后eval,而//@ sourceURL则暗示在Debugger中使得这段JavaScript代码以Coffeeeeeeeee的面貌体现出来,似乎此时它就是一个文件。

    var coffee = CoffeeScript.compile(code.value)+ "//@ sourceURL=" +
    (evalName.value || "Coffeeeeeeee!"); eval(coffee);

    Reference:

    [A simple example of //@ sourceURL eval naming](http://www.thecssninja.com/demo/source_mapping/compile.html)

    [debugging concatenated JavaScript files](http://pmuellr.blogspot.com/2011/11/debugging-concatenated-javascript-files.html)

    # Delay loading JavaScript

        - Dynamic Insert

    (function() {
        function async_load(){
            var s = document.createElement('script');
            s.type = 'text/javascript';
            s.async = true;
            s.src = 'http://yourdomain.com/script.js';
            var x = document.getElementsByTagName('script')[0];
            x.parentNode.insertBefore(s, x);
        }
        if (window.attachEvent)
            window.attachEvent('onload', async_load);
        else
            window.addEventListener('load', async_load, false);
    })();

    Reference:

    [CoffeeScript Home Page](http://coffeescript.org/)

    [Lazy Loading Asyncronous Javascript](http://friendlybit.com/js/lazy-loading-asyncronous-javascript/)

    [HIGH PERFORMANCE WEB SITES BLOG](http://stevesouders.com/)

    # OO JavaScript

    ## class

    -

    var apple = function () {
    
        return {
            type: ‘macintosh’,
            color: ‘red’,
            getInfo: function () {
                 return this.color + ‘ ‘ this.type + ‘ apple’;
            }
       };
    
    }

    -

    function Apple (type) {
        this.type = type;
        this.color = "red";
        this.getInfo = function() {
            return this.color + ' ' + this.type + ' apple';
        };
    }

    -

    function Apple (type) {
        this.type = type;
        this.color = "red";
    }
    
    Apple.prototype.getInfo = function() {
        return this.color + ' ' + this.type + ' apple';
    };

    -

    var apple = {
        type: "macintosh",
        color: "red",
        getInfo: function () {
            return this.color + ' ' + this.type + ' apple';
        }
    }

    -

    http://yuiblog.com/blog/2006/11/13/javascript-we-hardly-new-ya/

    http://www.phpied.com/3-ways-to-define-a-javascript-class/

    ## Singleton

    function Singleton() {
    }
     
    Singleton.getInstance = function( )
    {
        if (Singleton.instance == undefined) {
             Singleton.instance = new Singleton();
        }
        return Singleton.instance;
    }

    ## static method

    function Calculator() {
     
    }
    
    Calculator.multiply = function(val1 , val2) {
        return (val1*val2);
    }
  • 相关阅读:
    如何处理大数据量抽数长期无响应
    处理链报错邮件通知
    BW数据源深入研究【转自WKingChen的博客】
    BW:处理链报错解决步骤
    创建自己的Convers. Routine.
    vs2005 创建 C++ Dll项目
    C++之模板
    delphi 的 pos 函数 对中文支持不好。
    delphi中 socket 心跳包的实现
    C++ UTF8编码转换 CChineseCode
  • 原文地址:https://www.cnblogs.com/piaoger/p/2491074.html
Copyright © 2020-2023  润新知