PK ;GN meta.xmlvþlinxq 2018-10-24 9:24:13 XMind R3.7.8.201807240049 900 600 #FFFFFF PKHoã PK ;GN content.xml ¿h@Javascript 对象 å
ç§ä¸»è¦ç±»å string number boolean null typeof(null) === object
typeof(null) === object undefined object 屿§æè¿°ç¬¦ writable enumerable configurable value éå some every forEach for ... in for ... of for...ofæ¯es6å¼å
¥çæ°éåæ¹å¼ï¼ä½¿ç¨çæ¯è¿ä»£å¨ï¼å
¶åçç¸å½äºï¼
var myObject = {
a: 2,
b: 3
};
Object.defineProperty( myObject, Symbol.iterator, {
enumerable: false,
writable: false,
configurable: true,
value: function() {
var o = this;
var idx = 0;
var ks = Object.keys( o );
return {
next: function() {
return {
value: o[ks[idx++]],
done: (idx > ks.length)
};
}
};
}
} );
// æå¨éå myObject
var it = myObject[Symbol.iterator]();
var x = it.next();
while(!x.done){
console.log(x.value);;
x = it.next();
}
for...ofæ¯es6å¼å
¥çæ°éåæ¹å¼ï¼ä½¿ç¨çæ¯è¿ä»£å¨ï¼å
¶åçç¸å½äºï¼
var myObject = {
a: 2,
b: 3
};
Object.defineProperty( myObject, Symbol.iterator, {
enumerable: false,
writable: false,
configurable: true,
value: function() {
var o = this;
var idx = 0;
var ks = Object.keys( o );
return {
next: function() {
return {
value: o[ks[idx++]],
done: (idx > ks.length)
};
}
};
}
} );
// æå¨éå myObject
var it = myObject[Symbol.iterator]();
var x = it.next();
while(!x.done){
console.log(x.value);;
x = it.next();
} 对象æ·è´ æ·±æ·è´ JSON.parse(JSON.stringify()) éå½å¤å¶ææå±çº§å±æ§ $.extend æµ
æ·è´ Object.assign()ä»
对æå¤ä¸å±åäºæ·±æ·è´ï¼éé¢ç对象ä»ç¶æ¯æµ
æ·è´ Object.assign()ä»
对æå¤ä¸å±åäºæ·±æ·è´ï¼éé¢ç对象ä»ç¶æ¯æµ
æ·è´ 'use strict';
let obj1 = { a: 0 , b: { c: 0, d:{ee: 323 }}};
let obj2 = Object.assign({}, obj1);
console.log(JSON.stringify(obj2));
// æ·±æ·è´
obj1.a = 1;
console.log(JSON.stringify(obj1));
console.log(JSON.stringify(obj2));
// æ·±æ·è´
obj2.a = 2;
console.log(JSON.stringify(obj1));
console.log(JSON.stringify(obj2));
// 以ä¸ä¸¤ä¸ªä¾åæ æé¤äºæå¤ä¸å±ï¼éé¢çå¯¹è±¡é½æ¯æµ
æ·è´
obj1.b.c = 3;
console.log(JSON.stringify(obj1));
console.log(JSON.stringify(obj2));
obj2.b.c = 5;
console.log(JSON.stringify(obj1));
console.log(JSON.stringify(obj2));
obj1.b.d.ee = 988;
console.log(JSON.stringify(obj1));
console.log(JSON.stringify(obj2));
obj2.b.d.ee = 123;
console.log(JSON.stringify(obj1));
console.log(JSON.stringify(obj2));
'use strict';
let obj1 = { a: 0 , b: { c: 0, d:{ee: 323 }}};
let obj2 = Object.assign({}, obj1);
console.log(JSON.stringify(obj2));
// æ·±æ·è´
obj1.a = 1;
console.log(JSON.stringify(obj1));
console.log(JSON.stringify(obj2));
// æ·±æ·è´
obj2.a = 2;
console.log(JSON.stringify(obj1));
console.log(JSON.stringify(obj2));
// 以ä¸ä¸¤ä¸ªä¾åæ æé¤äºæå¤ä¸å±ï¼éé¢çå¯¹è±¡é½æ¯æµ
æ·è´
obj1.b.c = 3;
console.log(JSON.stringify(obj1));
console.log(JSON.stringify(obj2));
obj2.b.c = 5;
console.log(JSON.stringify(obj1));
console.log(JSON.stringify(obj2));
obj1.b.d.ee = 988;
console.log(JSON.stringify(obj1));
console.log(JSON.stringify(obj2));
obj2.b.d.ee = 123;
console.log(JSON.stringify(obj1));
console.log(JSON.stringify(obj2)); var å
¶å建çå
¨å±åéæ æ³å é¤ï¼deleteï¼ æ varå建çéå¼å
¨å±åéå¯å é¤ï¼deleteï¼ è±æ¬å·çä½ç½® åå·æå
¥æºå¶(semicolon insertion mechanism) ååé¾ åå prototype function Person(){
}
Person.prototype = {
name : "Nicholas",
age : 29,
job: "Software Engineer",
sayName : function () {
alert(this.name);
}
};
æ¤æ¶constructor 屿§ä¸åæå Person,èæ¯æåobject :
var friend = new Person();
alert(friend instanceof Object); //true
alert(friend instanceof Person); //true
alert(friend.constructor == Person); //false
alert(friend.constructor == Object); //true
è¥æé 彿°å¾éè¦åå¯åæ :
( æ¤æ¶constructor ç Enumerable ä¼è¢«è®¾ç½®ä¸ºtrue )
Person.prototype = {
constructor : Person,
name : "Nicholas",
age : 29,
job: "Software Engineer",
sayName : function () {
alert(this.name);
}
};
é»è®¤æ
åµä¸ï¼åçç constructor 屿§æ¯ä¸å¯æä¸¾çï¼å æ¤å¦æä½ 使ç¨å
¼å®¹ ECMAScript 5 ç JavaScript 弿ï¼å¯ä»¥è¯ä¸è¯Object.defineProperty() :
//é设æé 彿°ï¼åªéç¨äº ECMAScript 5 å
¼å®¹çæµè§å¨
Object.defineProperty(Person.prototype, "constructor", {
enumerable: false,
value: Person
});
function Person(){
}
Person.prototype = {
name : "Nicholas",
age : 29,
job: "Software Engineer",
sayName : function () {
alert(this.name);
}
};
æ¤æ¶constructor 屿§ä¸åæå Person,èæ¯æåobject :
var friend = new Person();
alert(friend instanceof Object); //true
alert(friend instanceof Person); //true
alert(friend.constructor == Person); //false
alert(friend.constructor == Object); //true
è¥æé 彿°å¾éè¦åå¯åæ :
( æ¤æ¶constructor ç Enumerable ä¼è¢«è®¾ç½®ä¸ºtrue )
Person.prototype = {
constructor : Person,
name : "Nicholas",
age : 29,
job: "Software Engineer",
sayName : function () {
alert(this.name);
}
};
é»è®¤æ
åµä¸ï¼åçç constructor 屿§æ¯ä¸å¯æä¸¾çï¼å æ¤å¦æä½ 使ç¨å
¼å®¹ ECMAScript 5 ç JavaScript 弿ï¼å¯ä»¥è¯ä¸è¯Object.defineProperty() :
//é设æé 彿°ï¼åªéç¨äº ECMAScript 5 å
¼å®¹çæµè§å¨
Object.defineProperty(Person.prototype, "constructor", {
enumerable: false,
value: Person
}); ä½ç¨å å¼å¸¸ function foo(a) {
var b;
console.log( a + b );
b = a;
}
foo( 2 );
è¿æ¯ä¸ä¸ªâæªå£°æâçåéï¼å 为å¨ä»»ä½ç¸å
³çä½ç¨åä¸é½æ æ³æ¾å°å®ã卿æåµå¥çä½ç¨åä¸é寻ä¸å°æéçåéï¼å¼æå°±ä¼æåº ReferenceError å¼å¸¸
function foo(a) {
var b;
console.log( a + b );
b = a;
}
foo( 2 );
è¿æ¯ä¸ä¸ªâæªå£°æâçåéï¼å 为å¨ä»»ä½ç¸å
³çä½ç¨åä¸é½æ æ³æ¾å°å®ã卿æåµå¥çä½ç¨åä¸é寻ä¸å°æéçåéï¼å¼æå°±ä¼æåº ReferenceError å¼å¸¸ ReferenceError å¨ä½ç¨å䏿¾ä¸å°ç¸åºåéå°±ä¼æç¤ºè¯¥é误
å¨ä½ç¨å䏿¾ä¸å°ç¸åºåéå°±ä¼æç¤ºè¯¥é误 TypeError åé已声æï¼ä½æªèµå¼ï¼å¯¼è´æ§è¡ç¸åºæä½æ¥éï¼
å¦ var a ; a(12);
åéaä»
åäºå£°æï¼ä½æ¯éé¢è¢«å½å彿°æ¥æ§è¡
åé已声æï¼ä½æªèµå¼ï¼å¯¼è´æ§è¡ç¸åºæä½æ¥éï¼
å¦ var a ; a(12);
åéaä»
åäºå£°æï¼ä½æ¯éé¢è¢«å½å彿°æ¥æ§è¡ 彿°ä½ç¨å å¿åä¸å
·å ç«å³æ§è¡å½æ° IIFE è§£å³ undefined æ è¯ç¬¦çé»è®¤å¼è¢«é误è¦ç导è´çå¼å¸¸ å°ä¸ä¸ªåæ°å½å为 undefinedï¼ä½æ¯å¨å¯¹åºçä½ç½®ä¸ä¼ å
¥ä»»ä½å¼ï¼è¿æ ·å°±
å¯ä»¥ä¿è¯å¨ä»£ç åä¸ undefined æ è¯ç¬¦çå¼ççæ¯ undefinedï¼
undefined = true; // ç»å
¶ä»ä»£ç æäºä¸ä¸ªå¤§åï¼ç»å¯¹ä¸è¦è¿æ ·åï¼
(function IIFE( undefined ) {
var a;
if (a === undefined) {
console.log( "Undefined is safe here!" );
}
})();
å°ä¸ä¸ªåæ°å½å为 undefinedï¼ä½æ¯å¨å¯¹åºçä½ç½®ä¸ä¼ å
¥ä»»ä½å¼ï¼è¿æ ·å°±
å¯ä»¥ä¿è¯å¨ä»£ç åä¸ undefined æ è¯ç¬¦çå¼ççæ¯ undefinedï¼
undefined = true; // ç»å
¶ä»ä»£ç æäºä¸ä¸ªå¤§åï¼ç»å¯¹ä¸è¦è¿æ ·åï¼
(function IIFE( undefined ) {
var a;
if (a === undefined) {
console.log( "Undefined is safe here!" );
}
})(); å置代ç çè¿è¡é¡ºåº var a = 2;30
(function IIFE( def ) {
def( window );
})(function def( global ) {
var a = 3;
console.log( a ); // 3
console.log( global.a ); // 2
});
var a = 2;30
(function IIFE( def ) {
def( window );
})(function def( global ) {
var a = 3;
console.log( a ); // 3
console.log( global.a ); // 2
}); åä½ç¨å å徿¶é function process(data) {
// å¨è¿éåç¹æè¶£çäºæ
}
var someReallyBigData = { .. };
process( someReallyBigData );
var btn = document.getElementById( "my_button" );
btn.addEventListener( "click", function click(evt) {
console.log("button clicked");
}, /*capturingPhase=*/false );
click 彿°çç¹å»åè°å¹¶ä¸éè¦ someReallyBigData åéãç论ä¸è¿æå³çå½ process(..) æ§
è¡åï¼å¨å
åä¸å ç¨å¤§é空é´çæ°æ®ç»æå°±å¯ä»¥è¢«åå¾åæ¶äºã使¯ï¼ç±äº click 彿°å½¢æ
äºä¸ä¸ªè¦çæ´ä¸ªä½ç¨åçéå
ï¼ JavaScript 弿ææå¯è½ä¾ç¶ä¿åçè¿ä¸ªç»æï¼åå³äºå
·ä½
å®ç°ï¼ãåä½ç¨åå¯ä»¥ææ¶è¿ç§é¡¾èï¼å¯ä»¥è®©å¼ææ¸
æ¥å°ç¥é没æå¿
è¦ç»§ç»ä¿å someReallyBigData äºï¼
function process(data) {
// å¨è¿éåç¹æè¶£çäºæ
}
// å¨è¿ä¸ªåä¸å®ä¹çå
容å®äºå¯ä»¥éæ¯ï¼
{
let someReallyBigData = { .. };
process( someReallyBigData );
}
var btn = document.getElementById( "my_button" );
btn.addEventListener( "click", function click(evt){
console.log("button clicked");
}, /*capturingPhase=*/false );
function process(data) {
// å¨è¿éåç¹æè¶£çäºæ
}
var someReallyBigData = { .. };
process( someReallyBigData );
var btn = document.getElementById( "my_button" );
btn.addEventListener( "click", function click(evt) {
console.log("button clicked");
}, /*capturingPhase=*/false );
click 彿°çç¹å»åè°å¹¶ä¸éè¦ someReallyBigData åéãç论ä¸è¿æå³çå½ process(..) æ§
è¡åï¼å¨å
åä¸å ç¨å¤§é空é´çæ°æ®ç»æå°±å¯ä»¥è¢«åå¾åæ¶äºã使¯ï¼ç±äº click 彿°å½¢æ
äºä¸ä¸ªè¦çæ´ä¸ªä½ç¨åçéå
ï¼ JavaScript 弿ææå¯è½ä¾ç¶ä¿åçè¿ä¸ªç»æï¼åå³äºå
·ä½
å®ç°ï¼ãåä½ç¨åå¯ä»¥ææ¶è¿ç§é¡¾èï¼å¯ä»¥è®©å¼ææ¸
æ¥å°ç¥é没æå¿
è¦ç»§ç»ä¿å someReallyBigData äºï¼
function process(data) {
// å¨è¿éåç¹æè¶£çäºæ
}
// å¨è¿ä¸ªåä¸å®ä¹çå
容å®äºå¯ä»¥éæ¯ï¼
{
let someReallyBigData = { .. };
process( someReallyBigData );
}
var btn = document.getElementById( "my_button" );
btn.addEventListener( "click", function click(evt){
console.log("button clicked");
}, /*capturingPhase=*/false ); 彿° 彿°åæ° ææå½æ°ç忰齿¯æå¼ä¼ éç Example:
function setName(obj) {
obj.name = "Nicholas";
obj = new Object();
obj.name = "Greg";
}
var person = new Object();
setName(person);
alert(person.name); //"Nicholas"
åæ°æå¼ä¼ éï¼æ§è¡setName彿°æ¶ä¼å°personææåçObjectå®ä¾å°åå¤å¶ä¸ä»½ï¼ä¼ å°åæ°å
é¨ãè¯¥å¯æ¬åå
¶personææåç齿¯åä¸ä¸ªå
ååºåï¼å³ä»ä»¬åå¨çæéå°åé½ä¸æ ·ã
Example:
function setName(obj) {
obj.name = "Nicholas";
obj = new Object();
obj.name = "Greg";
}
var person = new Object();
setName(person);
alert(person.name); //"Nicholas"
åæ°æå¼ä¼ éï¼æ§è¡setName彿°æ¶ä¼å°personææåçObjectå®ä¾å°åå¤å¶ä¸ä»½ï¼ä¼ å°åæ°å
é¨ãè¯¥å¯æ¬åå
¶personææåç齿¯åä¸ä¸ªå
ååºåï¼å³ä»ä»¬åå¨çæéå°åé½ä¸æ ·ã å½å彿°è¡¨è¾¾å¼ 声æ è¡¨è¾¾å¼ éå¼è½¬æ¢ æ å1ï¼
function fn() {
return 20;
}
console.log(fn + 10);
æ å2ï¼
function fn() {
return 20;
}
fn.toString = function() {
return 10;
}
console.log(fn + 10); // è¾åºç»ææ¯å¤å°ï¼
æ å3ï¼
function fn() {
return 20;
}
fn.toString = function() {
return 10;
}
fn.valueOf = function() {
return 5;
}
console.log(fn + 10);
æ å1ï¼
function fn() {
return 20;
}
console.log(fn + 10);
æ å2ï¼
function fn() {
return 20;
}
fn.toString = function() {
return 10;
}
console.log(fn + 10); // è¾åºç»ææ¯å¤å°ï¼
æ å3ï¼
function fn() {
return 20;
}
fn.toString = function() {
return 10;
}
fn.valueOf = function() {
return 5;
}
console.log(fn + 10); å½æä»¬æ²¡æéæ°å®ä¹toStringä¸valueOfæ¶ï¼å½æ°çéå¼è½¬æ¢ä¼è°ç¨é»è®¤çtoStringæ¹æ³ï¼å®ä¼å°å½æ°çå®ä¹å
容ä½ä¸ºå符串è¿åãè彿们䏻å¨å®ä¹äºtoString/vauleOfæ¹æ³æ¶ï¼é£ä¹éå¼è½¬æ¢çè¿åç»æåç±æä»¬èªå·±æ§å¶äºãå
¶ä¸valueOfçä¼å
级ä¼toStringé«ä¸ç¹ã 彿°å¼ç¼ç¨ æ¯éå å¤åæ°ç彿°è½¬æ¢æååæ°çå½¢å¼ function currying(fn, n) {
return function (m) {
return fn.call(this, m, n);
};
}
function currying(fn, n) {
return function (m) {
return fn.call(this, m, n);
};
} åé NaN console.log(NaN == NaN); // false
console.log(NaN === NaN); // false
alert(isNaN(true)); //falseï¼å¯ä»¥è¢«è½¬æ¢ææ°å¼ 1ï¼
console.log(NaN == NaN); // false
console.log(NaN === NaN); // false
alert(isNaN(true)); //falseï¼å¯ä»¥è¢«è½¬æ¢ææ°å¼ 1ï¼
åé声æè¢«æåï¼ä½ç¨åèå´å
ï¼ null ä¸ undefined 1. null 䏿¯ç©ºå¯¹è±¡æéï¼èæ¯åºæ¬æ°æ®ç±»åï¼æ
æï¼
typeof(null) // object
å¨ JavaScript ä¸äºè¿å¶åä¸ä½é½ä¸º 0 çè¯ä¼è¢«å¤
æä¸º object ç±»åï¼ null çäºè¿å¶è¡¨ç¤ºæ¯å
¨ 0ï¼èªç¶åä¸ä½ä¹æ¯ 0ï¼æä»¥æ§è¡ typeof æ¶ä¼è¿åâobjectâ
2. undefined æ´¾çèª null
console.log(null == undefined); //true
console.log(null === undefined); //false
1. null 䏿¯ç©ºå¯¹è±¡æéï¼èæ¯åºæ¬æ°æ®ç±»åï¼æ
æï¼
typeof(null) // object
å¨ JavaScript ä¸äºè¿å¶åä¸ä½é½ä¸º 0 çè¯ä¼è¢«å¤
æä¸º object ç±»åï¼ null çäºè¿å¶è¡¨ç¤ºæ¯å
¨ 0ï¼èªç¶åä¸ä½ä¹æ¯ 0ï¼æä»¥æ§è¡ typeof æ¶ä¼è¿åâobjectâ
2. undefined æ´¾çèª null
console.log(null == undefined); //true
console.log(null === undefined); //false
éå
ç¨å¤ 读å彿°å
é¨åé 让è¿äºåéå§ç»ä¿æå¨å
åä¸ æ å1ï¼
ããfunction f1(){
ããããvar n=999;
ããããnAdd=function(){n+=1}
ããããfunction f2(){
ããããããalert(n);
ãããã}
ããããreturn f2;
ãã}
ããvar result=f1();
ããresult(); // 999
ããnAdd();
ããresult(); // 1000
åå å°±å¨äºf1æ¯f2çç¶å½æ°ï¼èf2被èµç»äºä¸ä¸ªå
¨å±åéï¼è¿å¯¼è´f2å§ç»å¨å
åä¸ï¼èf2çåå¨ä¾èµäºf1ï¼å æ¤f1ä¹å§ç»å¨å
åä¸ï¼ä¸ä¼å¨è°ç¨ç»æåï¼è¢«åå¾åæ¶æºå¶ï¼garbage collectionï¼åæ¶ã
æ å2:
for( var i = 0; i < 5; i++ ) {
setTimeout(() => {
console.log( i );
}, 1000 * i)
}
// ç»æä¸º5个5ï¼æ¯ç§è¾åºä¸ä¸ª
æ ¹æ®ä½ç¨åçå·¥ä½åçï¼å®é
æ
嵿¯å°½ç®¡å¾ªç¯ä¸çäºä¸ªå½æ°æ¯å¨å个è¿ä»£ä¸åå«å®ä¹çï¼
使¯å®ä»¬é½è¢«å°éå¨ä¸ä¸ªå
±äº«çå
¨å±ä½ç¨åä¸ï¼å æ¤å®é
ä¸åªæä¸ä¸ª iã
æ å3ï¼
for (var i = 1; i <= 5; i++) {
let j = i; // è¾åºç»ææ£å¸¸
setTimeout(function timer() {
console.log(j);
},j*1000);
}
æ å4ï¼
for (var i = 1; i <= 5; i++) {
var j = i; // è¾åºç»æä»ç¶æ¯5个5
setTimeout(function timer() {
console.log(j);
},j*1000);
}
æ å5ï¼
for( var i = 0; i < 5; i++ ) {
((j) => {
setTimeout(() => {
console.log( j );
}, 1000 * j)
})(i)
}
æ å6ï¼
function test(){
for (let i=0; i<5; i++) { // æ£å¸¸
setTimeout( function timer() {
console.log(new Date(),i);
}, i*1000 );
}
// console.log("end",new Date(),i); //å 为åéä½ç¨åçé®é¢ï¼è¿é伿¥i ä¸åå¨ï¼æªå£°æ
}
æ å1ï¼
ããfunction f1(){
ããããvar n=999;
ããããnAdd=function(){n+=1}
ããããfunction f2(){
ããããããalert(n);
ãããã}
ããããreturn f2;
ãã}
ããvar result=f1();
ããresult(); // 999
ããnAdd();
ããresult(); // 1000
åå å°±å¨äºf1æ¯f2çç¶å½æ°ï¼èf2被èµç»äºä¸ä¸ªå
¨å±åéï¼è¿å¯¼è´f2å§ç»å¨å
åä¸ï¼èf2çåå¨ä¾èµäºf1ï¼å æ¤f1ä¹å§ç»å¨å
åä¸ï¼ä¸ä¼å¨è°ç¨ç»æåï¼è¢«åå¾åæ¶æºå¶ï¼garbage collectionï¼åæ¶ã
æ å2:
for( var i = 0; i < 5; i++ ) {
setTimeout(() => {
console.log( i );
}, 1000 * i)
}
// ç»æä¸º5个5ï¼æ¯ç§è¾åºä¸ä¸ª
æ ¹æ®ä½ç¨åçå·¥ä½åçï¼å®é
æ
嵿¯å°½ç®¡å¾ªç¯ä¸çäºä¸ªå½æ°æ¯å¨å个è¿ä»£ä¸åå«å®ä¹çï¼
使¯å®ä»¬é½è¢«å°éå¨ä¸ä¸ªå
±äº«çå
¨å±ä½ç¨åä¸ï¼å æ¤å®é
ä¸åªæä¸ä¸ª iã
æ å3ï¼
for (var i = 1; i <= 5; i++) {
let j = i; // è¾åºç»ææ£å¸¸
setTimeout(function timer() {
console.log(j);
},j*1000);
}
æ å4ï¼
for (var i = 1; i <= 5; i++) {
var j = i; // è¾åºç»æä»ç¶æ¯5个5
setTimeout(function timer() {
console.log(j);
},j*1000);
}
æ å5ï¼
for( var i = 0; i < 5; i++ ) {
((j) => {
setTimeout(() => {
console.log( j );
}, 1000 * j)
})(i)
}
æ å6ï¼
function test(){
for (let i=0; i<5; i++) { // æ£å¸¸
setTimeout( function timer() {
console.log(new Date(),i);
}, i*1000 );
}
// console.log("end",new Date(),i); //å 为åéä½ç¨åçé®é¢ï¼è¿é伿¥i ä¸åå¨ï¼æªå£°æ
} 注æ ç±äºéå
ä¼ä½¿å¾å½æ°ä¸çåéé½è¢«ä¿åå¨å
åä¸ï¼å
åæ¶èå¾å¤§ï¼
æä»¥ä¸è½æ»¥ç¨éå
ï¼å¦åä¼é æç½é¡µçæ§è½é®é¢ï¼å¨IEä¸å¯è½å¯¼è´å
åæ³é²ã
è§£å³æ¹æ³æ¯ï¼å¨éåºå½æ°ä¹åï¼å°ä¸ä½¿ç¨çå±é¨åéå
¨é¨å é¤ã éå
ä¼å¨ç¶å½æ°å¤é¨ï¼æ¹åç¶å½æ°å
é¨åéçå¼ãæä»¥ï¼å¦æä½ æç¶å½æ°å½ä½å¯¹è±¡ï¼objectï¼ä½¿ç¨ï¼æéå
å½ä½å®çå
¬ç¨æ¹æ³ï¼Public Methodï¼ï¼æå
é¨åéå½ä½å®çç§æå±æ§ï¼private valueï¼ï¼è¿æ¶ä¸å®è¦å°å¿ï¼ä¸è¦é便æ¹åç¶å½æ°å
é¨åéçå¼ã éå
å°±æ¯è½å¤è¯»åå
¶ä»å½æ°å
é¨åéç彿°ã
æ å1ï¼
getNameFuncè¿åçå¿å彿°çæ§è¡ç¯å¢æ¯å
¨å±çï¼èä¸thisåªå¨å½æ°å
é¨èµ·ä½ç¨ãæ¤æ¶çthis.nameå¨å¿å彿°ä¸æ¾ä¸å°ï¼æä»¥å°±ä»å
¨å±ä¸æ¾ï¼æ¾å°åæå°åºæ¥ã
ã var name = "The Window";
ããvar object = {
ããããname : "My Object",
ããããgetNameFunc : function(){
ããããããreturn function(){
ããããããããreturn this.name;
ãããããã};
ãããã}
ãã};
ããalert(object.getNameFunc()());
æ å2ï¼
var name = "The Window";
ããvar object = {
ããããname : "My Object",
ããããgetNameFunc : function(){
ããããããvar that = this;
ããããããreturn function(){
ããããããããreturn that.name;
ãããããã};
ãããã}
ãã};
ããalert(object.getNameFunc()());
éå
å°±æ¯è½å¤è¯»åå
¶ä»å½æ°å
é¨åéç彿°ã
æ å1ï¼
getNameFuncè¿åçå¿å彿°çæ§è¡ç¯å¢æ¯å
¨å±çï¼èä¸thisåªå¨å½æ°å
é¨èµ·ä½ç¨ãæ¤æ¶çthis.nameå¨å¿å彿°ä¸æ¾ä¸å°ï¼æä»¥å°±ä»å
¨å±ä¸æ¾ï¼æ¾å°åæå°åºæ¥ã
ã var name = "The Window";
ããvar object = {
ããããname : "My Object",
ããããgetNameFunc : function(){
ããããããreturn function(){
ããããããããreturn this.name;
ãããããã};
ãããã}
ãã};
ããalert(object.getNameFunc()());
æ å2ï¼
var name = "The Window";
ããvar object = {
ããããname : "My Object",
ããããgetNameFunc : function(){
ããããããvar that = this;
ããããããreturn function(){
ããããããããreturn that.name;
ãããããã};
ãããã}
ãã};
ããalert(object.getNameFunc()()); æ¹åç¯å¢ä¸ä¸æ apply/call apply func.apply(this, [arg1, arg2]) func.apply(this, [arg1, arg2])
call func.call(this, arg1, arg2); func.call(this, arg1, arg2);
bind ç»å®åè¿åä¸ä¸ªå½æ°ï¼å¾
åç»è°ç¨ã
夿¬¡ bind() æ¯æ æçï¼æ´æ·±å±æ¬¡çåå ï¼ bind() çå®ç°ï¼ç¸å½äºä½¿ç¨å½æ°å¨å
é¨å
äºä¸ä¸ª call / apply ï¼ç¬¬äºæ¬¡ bind() ç¸å½äºåå
ä½ç¬¬ä¸æ¬¡ bind() ,æ
ç¬¬äºæ¬¡ä»¥åç bind æ¯æ æ³çæçã ç»å®åè¿åä¸ä¸ªå½æ°ï¼å¾
åç»è°ç¨ã
夿¬¡ bind() æ¯æ æçï¼æ´æ·±å±æ¬¡çåå ï¼ bind() çå®ç°ï¼ç¸å½äºä½¿ç¨å½æ°å¨å
é¨å
äºä¸ä¸ª call / apply ï¼ç¬¬äºæ¬¡ bind() ç¸å½äºåå
ä½ç¬¬ä¸æ¬¡ bind() ,æ
ç¬¬äºæ¬¡ä»¥åç bind æ¯æ æ³çæçã
ç»å®åç«å³æ§è¡ ç»å®åéç«å³æ§è¡ 齿¯ä¸ºäºæ¹å彿°æ§è¡ä¸ä¸æ
1. æ¹åthisæéï¼ç¬¬ä¸ä¸ªåæ°é½æ¯thisè¦æåç对象ï¼ä¹å°±æ¯æ³æå®çä¸ä¸æï¼
2. åç¨å
¶ä»å¯¹è±¡çæ¹æ³
ä¸é¢å°±åç¨ä¸éé¢è¯é¢ï¼æ¥æ´æ·±å
¥çå»çè§£ä¸ apply å call ã
å®ä¹ä¸ä¸ª log æ¹æ³ï¼è®©å®å¯ä»¥ä»£ç console.log æ¹æ³ï¼å¸¸è§çè§£å³æ¹æ³æ¯ï¼
function log(msg)ã{
console.log(msg);
}
log(1); //1
log(1,2); //1
ä¸é¢æ¹æ³å¯ä»¥è§£å³æåºæ¬çéæ±ï¼ä½æ¯å½ä¼ å
¥åæ°çä¸ªæ°æ¯ä¸ç¡®å®çæ¶åï¼ä¸é¢çæ¹æ³å°±å¤±æäºï¼è¿ä¸ªæ¶åå°±å¯ä»¥èèä½¿ç¨ apply æè
callï¼æ³¨æè¿éä¼ å
¥å¤å°ä¸ªåæ°æ¯ä¸ç¡®å®çï¼æä»¥ä½¿ç¨applyæ¯æå¥½çï¼æ¹æ³å¦ä¸ï¼
function log(){
console.log.apply(console, arguments);
};
log(1); //1
log(1,2); //1 2
æ¥ä¸æ¥çè¦æ±æ¯ç»æ¯ä¸ä¸ª log æ¶æ¯æ·»å ä¸ä¸ª"(app)"çåè¾ï¼æ¯å¦ï¼
log("hello world"); //(app)hello world
该æä¹åæ¯è¾ä¼é
å¢?è¿ä¸ªæ¶åéè¦æ³å°argumentsåæ°æ¯ä¸ªä¼ªæ°ç»ï¼éè¿ Array.prototype.slice.call 转å为æ åæ°ç»ï¼åä½¿ç¨æ°ç»æ¹æ³unshiftï¼åè¿æ ·ï¼
function log(){
var args = Array.prototype.slice.call(arguments);
args.unshift('(app)');
console.log.apply(console, args);
}; 齿¯ä¸ºäºæ¹å彿°æ§è¡ä¸ä¸æ
1. æ¹åthisæéï¼ç¬¬ä¸ä¸ªåæ°é½æ¯thisè¦æåç对象ï¼ä¹å°±æ¯æ³æå®çä¸ä¸æï¼
2. åç¨å
¶ä»å¯¹è±¡çæ¹æ³
ä¸é¢å°±åç¨ä¸éé¢è¯é¢ï¼æ¥æ´æ·±å
¥çå»çè§£ä¸ apply å call ã
å®ä¹ä¸ä¸ª log æ¹æ³ï¼è®©å®å¯ä»¥ä»£ç console.log æ¹æ³ï¼å¸¸è§çè§£å³æ¹æ³æ¯ï¼
function log(msg)ã{
console.log(msg);
}
log(1); //1
log(1,2); //1
ä¸é¢æ¹æ³å¯ä»¥è§£å³æåºæ¬çéæ±ï¼ä½æ¯å½ä¼ å
¥åæ°çä¸ªæ°æ¯ä¸ç¡®å®çæ¶åï¼ä¸é¢çæ¹æ³å°±å¤±æäºï¼è¿ä¸ªæ¶åå°±å¯ä»¥èèä½¿ç¨ apply æè
callï¼æ³¨æè¿éä¼ å
¥å¤å°ä¸ªåæ°æ¯ä¸ç¡®å®çï¼æä»¥ä½¿ç¨applyæ¯æå¥½çï¼æ¹æ³å¦ä¸ï¼
function log(){
console.log.apply(console, arguments);
};
log(1); //1
log(1,2); //1 2
æ¥ä¸æ¥çè¦æ±æ¯ç»æ¯ä¸ä¸ª log æ¶æ¯æ·»å ä¸ä¸ª"(app)"çåè¾ï¼æ¯å¦ï¼
log("hello world"); //(app)hello world
该æä¹åæ¯è¾ä¼é
å¢?è¿ä¸ªæ¶åéè¦æ³å°argumentsåæ°æ¯ä¸ªä¼ªæ°ç»ï¼éè¿ Array.prototype.slice.call 转å为æ åæ°ç»ï¼åä½¿ç¨æ°ç»æ¹æ³unshiftï¼åè¿æ ·ï¼
function log(){
var args = Array.prototype.slice.call(arguments);
args.unshift('(app)');
console.log.apply(console, args);
};
声ææå ç¼è¯å¨æ§è¡æµç¨ 1. ç¼è¯é¶æ®µï¼å®ä¹å£°æ 2. æ§è¡é¶æ®µï¼ä¿çåå° å½æ°ååé声æé½ä¼è¢«æå
foo();
function foo() {
console.log( a ); // undefined
var a = 2;
}
彿°å£°æä¼è¢«æåï¼ä½æ¯å½æ°è¡¨è¾¾å¼å´ä¸ä¼è¢«æåã
foo(); // 䏿¯ ReferenceError, èæ¯ TypeError!
var foo = function bar() {
// ...
};
foo();
function foo() {
console.log( a ); // undefined
var a = 2;
}
彿°å£°æä¼è¢«æåï¼ä½æ¯å½æ°è¡¨è¾¾å¼å´ä¸ä¼è¢«æåã
foo(); // 䏿¯ ReferenceError, èæ¯ TypeError!
var foo = function bar() {
// ...
}; 彿°è¡¨è¾¾å¼ä¸ä¼è¢«æå 彿°å£°æä¼è¢«æåï¼ä½æ¯å½æ°è¡¨è¾¾å¼å´ä¸ä¼è¢«æåã
foo(); // 䏿¯ ReferenceError, èæ¯ TypeError!
var foo = function bar() {
// ...
};
å³ä½¿æ¯å
·åç彿°è¡¨è¾¾å¼ï¼åç§°æ è¯ç¬¦å¨èµå¼ä¹å乿 æ³å¨æå¨ä½ç¨åä¸ä½¿ç¨ï¼
foo(); // TypeError
bar(); // ReferenceError
var foo = function bar() {
// ...
};
彿°å£°æä¼è¢«æåï¼ä½æ¯å½æ°è¡¨è¾¾å¼å´ä¸ä¼è¢«æåã
foo(); // 䏿¯ ReferenceError, èæ¯ TypeError!
var foo = function bar() {
// ...
};
å³ä½¿æ¯å
·åç彿°è¡¨è¾¾å¼ï¼åç§°æ è¯ç¬¦å¨èµå¼ä¹å乿 æ³å¨æå¨ä½ç¨åä¸ä½¿ç¨ï¼
foo(); // TypeError
bar(); // ReferenceError
var foo = function bar() {
// ...
}; 使ç¨letå®ä¹çåéä¸ä¼è¢«æå 彿°å£°æä¼å
被æå foo(); // 1
var foo;
function foo() {
console.log( 1 );
}
foo = function() {
console.log( 2 );
};
ä¼è¾åº 1 è䏿¯ 2 ï¼è¿ä¸ªä»£ç çæ®µä¼è¢«å¼æç解为å¦ä¸å½¢å¼ï¼
function foo() {
console.log( 1 );
}
foo(); // 1
foo = function() {
console.log( 2 );
};
注æï¼ var foo 尽管åºç°å¨ function foo()... ç声æä¹åï¼ä½å®æ¯éå¤ç声æï¼å æ¤è¢«å¿½
ç¥äºï¼ï¼å ä¸ºå½æ°å£°æä¼è¢«æåå°æ®éåéä¹åã
foo(); // 1
var foo;
function foo() {
console.log( 1 );
}
foo = function() {
console.log( 2 );
};
ä¼è¾åº 1 è䏿¯ 2 ï¼è¿ä¸ªä»£ç çæ®µä¼è¢«å¼æç解为å¦ä¸å½¢å¼ï¼
function foo() {
console.log( 1 );
}
foo(); // 1
foo = function() {
console.log( 2 );
};
注æï¼ var foo 尽管åºç°å¨ function foo()... ç声æä¹åï¼ä½å®æ¯éå¤ç声æï¼å æ¤è¢«å¿½
ç¥äºï¼ï¼å ä¸ºå½æ°å£°æä¼è¢«æåå°æ®éåéä¹åã 被æ¡ä»¶å¤æææ§å¶ç彿°å£°æ foo(); // "b"
var a = true;
if (a) {
function foo() { console.log("a"); }
}
else {
function foo() { console.log("b"); }
}
foo(); // "b"
var a = true;
if (a) {
function foo() { console.log("a"); }
}
else {
function foo() { console.log("b"); }
} 模ååè§è CommonJS ç¼ºé· æ²¡ææ¨¡åç³»ç» æ ååºè¾å° æ²¡ææ åæ¥å£ ç¼ºä¹å
管çç³»ç» ä»¥åæ¥æ¹å¼å 载模åï¼ä¸»è¦ç¨å¨å端ã
var clock = require('clock');
clock.start();
è¿ç§åæ³éåæå¡ç«¯ï¼å ä¸ºå¨æå¡å¨è¯»å模å齿¯å¨æ¬å°ç£çï¼å è½½é度å¾å¿«ã使¯å¦æå¨å®¢æ·ç«¯ï¼å 载模åçæ¶åæå¯è½åºç°âåæ»âç¶åµã 以忥æ¹å¼å 载模åï¼ä¸»è¦ç¨å¨å端ã
var clock = require('clock');
clock.start();
è¿ç§åæ³éåæå¡ç«¯ï¼å ä¸ºå¨æå¡å¨è¯»å模å齿¯å¨æ¬å°ç£çï¼å è½½é度å¾å¿«ã使¯å¦æå¨å®¢æ·ç«¯ï¼å 载模åçæ¶åæå¯è½åºç°âåæ»âç¶åµã
AMD(ä¾èµåç½®)