美文网首页
JavaScript that you need to know

JavaScript that you need to know

作者: 闷油瓶小张 | 来源:发表于2015-10-27 22:30 被阅读16次

    This appendix covers

    • Which JavaScript concepts are important for effectively using jQuery
    • JavaScript Object basics
    • How functions are first-class objects
    • What's an IIFE?
    • Determing (and controlling) what this means
    • What's a closure?

    1 JavaScript Object fundamentals

    1.1 How objects come to be

    1.2 Properties of objects


    var ride = new Object();
    ride.make = 'Yamaha';
    ride.model = 'XT660R';
    ride.year = 2014;
    ride.purchased = new Date(2015, 4, 10);
    ride.purchased = new Date(2015, 7, 21);
    
    var owner = new Object();
    owner.name = 'Spike Spiegel';
    owner.occupation = 'bounty hunter';
    ride.owner = owner;
    
    var ownerName = ride.owner.name;
    
    ride.make
    ride['make']
    ride['m' + 'a' + 'k' + 'e']
    
    var p = 'make';
    ride[p]
    ride["a property name that's rather odd!"]
    

    1.3 Object literals


    var ride = {
    make: 'Yamaha',
    model: 'XT660R',
    year: 2014,
    purchased: new Date(2015, 7, 21),
    owner: {
        name: 'Spike Spiegel',
        occupation: 'bounty hunter'
      }
    };
    
    var someValues = [2, 3, 5, 7, 11,13, 17];
    

    1.4 Objects as window properties


    var aVariable = 'This is a text.';
    someObject.aProperty = 'This is another text.';
    
    var foo = 'bar';
    window.foo = 'bar';
    foo = 'bar';
    
    • A JavaScript object is an unordered collection of properties.
    • Properties consist of a name and a value.
    • Objects can be declared using object literals.
    • Arrays can be declared using array literals.
    • Top-level variables are properties of window.

    2 Functions as first-class citizens


    • Assigned to variables
    • Assigned as a property of an object
    • Passed as a parameter
    • Returned as a function result
    • Created using literals

    2.1 Function expressions and function declarations


    function doSomethingWonderful() {
      alert('Does something wonderful');
    }
    
    function hello() {alert('Hi there!');}
    hello = function hello() {alert('Hi there!');}
    window.hello = function hello() {alert('Hi there!');}
    
    var myFunc = function() {
      alert('this is a function');
    };
    
    myFunc();
    
    var myObj = {
      bar: function() {}
    };
    

    2.2 Functions as callbacks


    function hello() {alert('Hi there!');}
    setTimeout(hello, 5000);
    
    setTimeout(function() {alert('Hi there!');}, 5000);
    

    2.3 What this is all about


    var ride = {
     make: 'Yamaha',
     model: 'XT660R',
     year: 2014,
     purchased: new Date(2015, 7, 21),
     owner: {
     name: 'Spike Spiegel',
     occupation: 'bounty hunter'
     },
     whatAmI: function() {
     return this.year + ' ' + this.make + ' ' + this.model;
     }
    };
    
    var obj1 = { handle: 'obj1' };
     var obj2 = { handle: 'obj2' };
     var obj3 = { handle: 'obj3' };
     var value = 'test';
     window.handle = 'window';
     function whoAmI(param) {
     return this.handle + ' ' + param;
     }
     obj1.identifyMe = whoAmI;
     alert(whoAmI(value));
     alert(obj1.identifyMe(value));
     alert(whoAmI.call(obj2, value));
     alert(whoAmI.apply(obj3, [value]));
    
    • When the function is called directly as a top-level function, the function context is the window instance.
    • When called as a property of an object, the object becomes the function context of the function invocation. you could say that the function acts as a method for that object-as in OO languages. But take care not to get too blase about this analogy. you can beled astray if you're not careful, as the remainder of this example's results will show.
    • Employing the call() method of Function causes the function context to be set to whatever object is passed as the first parameter to call()-in this case, obj2. In this example, the function acts like a method to obj2, even though it has no association whatsoever-even as a property-with obj2. It also shows how parameters can be passed when using call().
    • As with call(), using the apply() method of Function sets the function context to whatever objects is passed as the first parameter. The difference between these two methods becomes significant only when parameters are passed to the function. In fact, when using apply() all the parameters must be provided as elements of a single array passed as the second argument.
    alert(obj1.identifyMe.call(obj3));
    

    2.4 Closures


    function timer() {
     var local = 1;
     window.setInterval(
     function() {
     $('#display').append(
     '<div>At ' + new Date() + ' local=' + local + '</div>'
     );
     local++;
     },
     2000
     );
     }
     timer();
    
    this.id = 'someID';
    var outer = this;
    $('*').each(function() {
     alert(outer.id);
    });
    

    2.5 Immediately-Invoked Function Expression


    (function() {
     // The code of the function goes here...
    })();
    
    var i = 10;
    (function(index) {
     // The code of the function goes here...
    })(i);
    
    for (var i = 1; i <= 3; i++) {
     document.getElementById('button-' + i).addEventListener(
     'click',
     function() { alert(i); }
     );
    }
    
    for (var i = 1; i <= 3; i++) {
     (function(index) {
     document.getElementById('button-' + index).addEventListener(
     'click',
     function() { alert(index); });
     })(i);
    }
    

    3 Summary

    相关文章

      网友评论

          本文标题:JavaScript that you need to know

          本文链接:https://www.haomeiwen.com/subject/kpbxhttx.html