欢迎使用CSDN-markdown编辑器
来源:互联网 发布:c 网络编程从哪开始学 编辑:程序博客网 时间:2024/06/06 04:27
javascript高程小结
纯手打
function fn() { var val = 1; //私有基础属性 var arr = [1]; //私有引用属性 this.val = 1; //实例基础属性 this.arr = [1]; //实例引用属性 } fn.prototype.val = 1; //原型基础属性 fn.prototype.arr = [1]; //原型引用属性---------- //原型链继承 function main() { this.val = 1; this.arr = [1]; } main.prototype.say = function () { console.log(this.arr) }; function local(){ } //local.prototype = main.prototype; 将父类原型直接赋值给子类原型相当于重写子类原型, //local.prototype.constructor = local; 其构造器属性会消失,导致子类实例无法指向起构造函数 local.prototype = new main(); var person1 = new local(); var person2 = new local(); person1.say(); person2.say(); /* 缺点:无法传参数,引用类型和函数会同时被修改 */---------- //借用构造函数继承 function main(val) { this.val = val; this.arr = [1]; this.say = function () { console.log("val:"+this.val +" arr:"+ this.arr); } } function local(val) { main.call(this, val); } var person1 = new local(1); var person2 = new local(2); person1.arr.push(2); person1.say(); person2.say(); /* 优点:可以传参,同时子类拥有自己的属性和方法副本 缺点: 父类函数多的时候,子类也拥有多函数,臃肿而且无继承思想,无法实现函数复用 */---------- //组合继承(常用) function main(val) { this.val = val; this.arr = [1]; } main.prototype.say = function () { console.log('val:' + this.val + ' arr:' + this.arr); } function local(val) { main.call(this,val); } local.prototype = new main(); var obj = new local(1); obj.say(); var obj2 = new local(2); obj2.say(); /* 优点:用构造函数,阻断引用属性共享问题, 利用原型链继承,实现函数复用 缺点:子类原型上有父类多余的属性 */ //寄生组合继承(最佳) function main() { this.val = 1; this.arr = [1]; } main.prototype.say = function () { console.log('val:' + this.val + ' arr:' + this.arr); } function local() { main.call(this); } function construt(obj) { var F = function () { }; F.prototype = obj; return new F(); } var pro = new construt(main.prototype); pro.constructor = local; local.prototype = pro; var obj = new local(); obj.val = 2; obj.say();/*个人写*/ function main() { this.val = 1; this.arr = [1]; } main.prototype.say = function () { console.log(this.val + ':' + this.arr); } function local() { main.call(this); } local.prototype = main.prototype; local.constructor = local; var person = new local(); var person2 = new local(); person.val = 2; person.arr.push(2); person.say(); person2.say(); /**/ function createFunction(){ var result=new Array(); for (var i = 0; i <10 ; i++) { result[i]=function(){ return i; } } return result; } /*闭包保存的包含函数的活动变量的最后值,引用指向同一个i */ function createFunctions(){ var result=new Array(); for (var i = 0; i < 10; i++) { result[i]=function(num){ return function(){ return num; } }(i); } return result; } /* (function(){ 函数体})() 表示:定义了一个匿名函数并执行 匿名函数具有全局性,其this 常指向window */ var name='the window'; var object={ name:'the object', getName:function(){ return function(){ return this.name; } } } alert(object.getName()); //返回the window var object={ name:'the window', getName:function(){ var that=this; return function(){ return that.name; } } } alert(object.getName()); //返回 the object function ouputNums(count){ (function(){ for (var i = 0; i < count; i++) { alert(i); } })(); alert(i); //返回错误 } /* (function(){})() 构成了一个私有作用域,i的变量只在里面临时存在,外部无法访问*/ /*通过私有作用域,反正向全局环境加入过多变量和方法,避免造成变量冲突*/ (function(){ var date=new Date(); if(date.getMonth()==0 && date.getDate()==1){ alert('Happy Year'); } })(); function add(value1,value2){ var sum=value1+value2; return sum; } /*value1,value2,sum 均为私有变量*/ function MyObject(){ /*私有函数,私有变量*/ var privateVariable=10; function privateFunction(){ return false; } /*特权方法:有权访问私有函数和私有变量的公共方法,类似c#的public访问private*/ this.publicMethod=function(){ privateVariable++; return privateFunction(); } } /*隐藏数据,类型C#的private和_private*/ function Person(name){ this.getName=function(){ return name; } this.setName=function(value){ name=value; } }
0 0
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 在活动中使用menu(以及简单地销毁一个活动)
- 基于spark排序的一种更廉价的实现方案-附基于spark的性能测试
- 朴素贝叶斯分类器与贝叶斯估计
- HTML中表格的单元格(水平或垂直方向)合并
- 魅族 C++ 微服务框架技术
- 欢迎使用CSDN-markdown编辑器
- linux下awk的基本使用
- 网络安全实验室脚本关第二题
- NSIS添加安装程序版本信息
- cin.get() 和 cin.peek() 的理解
- 面试珠玑
- Strus2学习二 OGNL表达式
- 内部类的用法及注意事项
- Dubbo分布式服务框架入门(附工程)