模塊化(封裝)的三種形式:
1,var o;
o = function(){
var p1;
var f1 = function(){};
return { prop: p1, func: f1 };
}();
2, var o;
(function(){
o.prop = p1;
o.func = function(){};
})();
3, var o;
o = new function(){
this.prop = p1;
this.func = function(){};
}();
1,var o;
o = function(){
var p1;
var f1 = function(){};
return { prop: p1, func: f1 };
}();
2, var o;
(function(){
o.prop = p1;
o.func = function(){};
})();
3, var o;
o = new function(){
this.prop = p1;
this.func = function(){};
}();
2018-04-27
function Father(){ }
Father.fn = function(){ }
function Sun(){
Father.call(this);
}
Sun.prototype = Object.create(Father.prototype);
Sun.prototype.constructor = Sun;
Sun.prototype.fn = function(){
Father.prototype.fn.apply(this);
}
Father.fn = function(){ }
function Sun(){
Father.call(this);
}
Sun.prototype = Object.create(Father.prototype);
Sun.prototype.constructor = Sun;
Sun.prototype.fn = function(){
Father.prototype.fn.apply(this);
}
2018-04-27
if(!Objecreate)
Object.create = function(proto){
var o = {};
o.prototype = proto;
return o;
}
Object.create = function(proto){
var o = {};
o.prototype = proto;
return o;
}
2018-04-27
if(!Object.create){
Object.create = function(proto){
function F(){}
F.prototype = proto;
return new F();
}
}
Object.create = function(proto){
function F(){}
F.prototype = proto;
return new F();
}
}
2018-04-27
1, p in o; //實例和原型鏈上的所有屬性
2, for(var p in o); //實例和原型鏈上的所有可枚舉的屬性
3, o.hasOwnProperty(p); //僅實例屬性,不包括原型鏈上的屬性
2, for(var p in o); //實例和原型鏈上的所有可枚舉的屬性
3, o.hasOwnProperty(p); //僅實例屬性,不包括原型鏈上的屬性
2018-04-27
var o = {x: 1, y: 2};
Object.prototype.z1 = 'zhao';
Object.defineProperty(Object.prototype, 'z2', { writable: true, value: 'qian' });
for(var p in o){ console.log(p, ': ', o[p]); }
//x: zhao y: qian z: sun
Object.prototype.z1 = 'zhao';
Object.defineProperty(Object.prototype, 'z2', { writable: true, value: 'qian' });
for(var p in o){ console.log(p, ': ', o[p]); }
//x: zhao y: qian z: sun
2018-04-27
1,scriptJava中沒有會計作用域,這一點不同于C++;
2,作用域鏈由內而外,內外不同,內外和一;
3,(function(){
var a;
var b;
})(); 防止全局變量污染環境。
2,作用域鏈由內而外,內外不同,內外和一;
3,(function(){
var a;
var b;
})(); 防止全局變量污染環境。
2018-04-26
通俗來講,皮包是指返回函數的函數,內部函數可以訪問外部函數作用域中的變量;
皮包的優點:
1,實現一些特殊的服務,你懂的;
2,封裝功能;
皮包的缺點:
1,浪費大量內存;
2,消耗性能;
皮包的優點:
1,實現一些特殊的服務,你懂的;
2,封裝功能;
皮包的缺點:
1,浪費大量內存;
2,消耗性能;
2018-04-26
3, bind()不僅能綁定作用域對象,還能綁定部分參數;
function fn(x, y, z){ //.... }
var f1 = fn.bind(null, 100); //var f1 = function(100, y, z){ //.... }
var f2 = f1.bind(null, 200); //var f2 = function(100, 200, z){ //..... }
function fn(x, y, z){ //.... }
var f1 = fn.bind(null, 100); //var f1 = function(100, y, z){ //.... }
var f2 = f1.bind(null, 200); //var f2 = function(100, 200, z){ //..... }
2018-04-26
2, function fn(x, y){//this}
fn.call(o, x, y); //改變函數的作用域鏈
fn.apply(o, [x, y]); //同上
fn.bind(o); //將this綁定到指向o
fn.call(o, x, y); //改變函數的作用域鏈
fn.apply(o, [x, y]); //同上
fn.bind(o); //將this綁定到指向o
2018-04-26
1,function fn(x, y, z){.....};
fn.name; //函數名字符串
fn.length; //函數形參個數
arguments; //傳入的實參組成的類數組
arguments.callee; //函數的自引用
fn.name; //函數名字符串
fn.length; //函數形參個數
arguments; //傳入的實參組成的類數組
arguments.callee; //函數的自引用
2018-04-26
那么檢查某一屬性是否在對象里面,也有用in,是不是屬性也是key。so,一切都是key-value 對 for in 遍歷的是key。
2018-04-26
0 in arr1 ,在數組里面in操作符針對索引,也就是key,并不針對value
var arr = ['尼瑪的','你妹的','哈哈'];
'尼瑪的' in arr //'false'
0 in arr //'true'
for( o in arr){ console.log(arr[o]);}
//尼瑪的
//你妹的
// 哈哈
對象里面for in,同樣只針對key
var arr = ['尼瑪的','你妹的','哈哈'];
'尼瑪的' in arr //'false'
0 in arr //'true'
for( o in arr){ console.log(arr[o]);}
//尼瑪的
//你妹的
// 哈哈
對象里面for in,同樣只針對key
2018-04-26