JavaScript that you need to know but might not!

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 有很多事情我不明白。 我不明白为什么爱渐渐会淡,不应该是越来越浓吗? 我不明白为什么人们会仅仅因为一个人长得好看就...
    堂前花开阅读 352评论 0 3
  • 她躺在床上,双脚直角放在墙面上,双手环在脑袋下面,眼睛缓慢的一眨一眨的看着墙上的海报,看着拉直的线上夹着的相片,她...
    南圆规阅读 199评论 3 1
  • 原谅我懒^-^ 放假了总会沉溺其中,什么也不用做,不用想,只管吃睡就够了,是啊,有时想想真的如猪一...
    羽落y阅读 386评论 0 0