1.1 JavaScript高级程序设计(第3版) 笔记---对象
2015-09-08 19:22
281 查看
//[1] var person=new Object(); person.name='yu'; person.getName=function(){ return this.name; }; //[1,2]使用同一个接口创建很多对象,会产生大量的重复代码 var person2={ name:"xi", getName:function(){ return this.name; } } //[3]工厂模式:但却没有解决对象识别的问题 function Person3(){ var o=new Object(); o.name="lin"; return o; } //[4]构造函数 违背对象方法的封装原则 function Person4(name){ this.name=name; //,就是每个方法都要在每个实例上重新创建一遍 /* this.getName=function(){ return this.name; } */ this.getName=getName; } function getName(){ return this.name; } var p4=new Person4("name"); alert(p4 instanceof Person4);//true //[5]原型 /* 1.Person.prototype 指向了原型对象,而Person.prototype.constructor 又指回了Person,实例中的指针仅指向原型,而不指向构造函数 2.访问对象的属性或者方法,首先会在对象的域中查找,如果没有找到会到对象的原型中查找 3.hasOwnProperty 对象自己的属性 4.in 对象自己的属性+prototy 5.for-in 6.对原型对象所做的任何修改都能够立即从实例上反映出 7.某个实例对原型中引用类型的修改,会反映在其他实例中 构造函数定义自己的属性,原型中定义函数和共享属性 */ function Person5(age){ this.age=age;//私有变量 } Person5.prototype.name="prototype";//共享变量(java static) Person5.prototype.getName=function() { return this.name; } alert(Person5.prototype.isPrototypeOf(p5));//true var p5=new Person5(5); p5.name="override"; alert(p5.name+" "+p5.age);//override 5 var p52=new Person5(52); alert(p52.name+" "+p52.age);//prototype 52 Person5.prototype.name="修改"; alert(p52.name);//修改 alert(p5.hasOwnProperty("name"));//true alert(p52.hasOwnProperty("name"));//false alert("name" in p5);//true; alert("name" in p52);//true; function Person6(){ } Person6.prototype={ constructor:Person6,//复制构造函数,其属性是可以枚举的了 name:"prototype", getName:function() { return this.name; } } function hasPrototypeProperty(object, name){ return !object.hasOwnProperty(name) && (name in object); } //[7]继承 子类型的原型指向父元素的实例 问题:父类中的引用属性将会被所有的子类共享 function SuperType(){ this.property ="super"; this.colors=["red","blue","green"]; } SuperType.prototype.getSuperValue = function(){ return this.property; }; SuperType.prototype.getSuperColors=function(){ return this.colors; } function SubType(){ this.subproperty = false; } //实现继承 SubType.prototype=new SuperType(); SubType.prototype.getSubValue = function (){ return this.subproperty; }; var instance=new SubType(); alert(instance.getSuperValue());//super; var instance2=new SubType(); var colors1=instance.getSuperColors(); alert(colors1); colors1.push("yellow");// alert(instance2.getSuperColors());//red,blue,green,yellow //[8]组合继承 子类构造函数与子类的原型 function SuperType2(name){ this.name=name; this.colors = ["red", "blue", "green"]; this.getName=function(){ return this.name; }; } SuperType2.prototype.sayName=function(){ alert(this.name); } function SubType2(name){ //call(传递参数)与apply(传递数组)作用一样,改变context作用域 //不支持原型中定义的方法 //sub2.sayName(); SuperType2.call(this,name); } //继承原型的方法 SubType2.prototype=new SuperType2(); SubType2.prototype.constructor = SubType2; var sub2=new SubType2("构造函数"); alert(sub2.getName()); var sub21=new SubType2("构造函数1"); sub2.colors.push("white"); alert(sub2.colors);//"red", "blue", "green","white" alert(sub21.colors);//"red", "blue", "green"
相关文章推荐
- JSON基础
- jar下载
- JavaScript语言精粹 笔记05 正则表达式
- JavaScript权威设计--JavaScript词法结构(简要学习笔记二)
- JavaScript中函数参数的值传递和引用传递
- JavaScript权威设计--JavaScript语言核心(简要学习笔记一)
- c环境下Json字符串的解析
- 【jsp】input 控制输入类型
- js 倒计时
- js前台加密传输到后台C#解密
- javascript新手入门必读书籍推荐
- js整理3
- 只让页面刷新一次.用js来实现
- javascript 中的 delete
- js创建对象
- i18next-页面层语言国际化js框架介绍
- fastjson生成和解析json数据
- javascript中加法操作符与减法操作符在字符串与数字相加时的区别
- JavaScript总结(一)
- js中变量的作用域