模块化(封装)的三种形式:
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