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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 有很多事情我不明白。 我不明白為什么愛漸漸會淡,不應(yīng)該是越來越濃嗎? 我不明白為什么人們會僅僅因為一個人長得好看就...
    堂前花開閱讀 376評論 0 3
  • 她躺在床上,雙腳直角放在墻面上,雙手環(huán)在腦袋下面,眼睛緩慢的一眨一眨的看著墻上的海報,看著拉直的線上夾著的相片,她...
    南圓規(guī)閱讀 233評論 3 1
  • 原諒我懶^-^ 放假了總會沉溺其中,什么也不用做,不用想,只管吃睡就夠了,是啊,有時想想真的如豬一...
    羽落y閱讀 409評論 0 0

友情鏈接更多精彩內(nèi)容