一.对象的组成
/*面向对象编程的特点抽象:抓住核心问题封装:只能通过对象来访问方法继承:从已有对象上继承出新的对象多态:多对象的不同形态1.对象的组成方法(行为、操作)——函数:过程、动态的属性——变量:状态、静态的 * *///对象的组成var arr=[];//对象下面的变量:叫做对象的属性arr.number=10;//alert(arr.number);//alert(arr.length);//对象下面的函数:叫做对象的方法arr.test=function(){alert(123);}arr.test();
二.创建第一个面向对象程序
//创建了一个空的对象var obj=new Object();//属性obj.name=‘小明‘;//方法obj.showName=function(){//alert(obj.name);alert(this.name);}obj.showName();
三.工厂方式
/*工厂方式面向对象中的封装函数改成与系统对象类似写法首字母大写New关键字提取This指向为新创建的对象 ????????????????????????????当new去调用一个函数:这个时候函数中的this就是创建出来的对 ???象,而且函数的返回值直接就是this了(隐式返回) ?????????????构造函数用来创建对象的函数,叫做构造函数 ???????????????????????new后面调用的函数存在的问题对象的引用浪费内存 * *///var obj=new Object();//obj.name=‘小明‘;//obj.showName=function(){//alert(this.name);//}//obj.showName();//var obj1=new Object();//obj1.name=‘小强‘;//obj1.showName=function(){//alert(this.name);//}//obj1.showName();function creatPerson(name){//1.原料var obj=new Object();//2.加工obj.name=name;obj.showName=function(){alert(this.name);}//3.出场return obj;}var p1=creatPerson(‘小明‘);p1.showName();var p2=creatPerson(‘小强‘);p2.showName(); ???//提取newfunction creatPerson(name){//1.原料//var obj=new Object();//2.加工this.name=name;this.showName=function(){alert(this.name);}//3.出场return obj;}var p1=new creatPerson(‘小明‘);p1.showName();var p2=new creatPerson(‘小强‘);p2.showName(); ????????????????????????
四.原型
/* 原型:去改写对象下面公用的方法或者属性,让公用的方法或者属性在内存中存在一份(提高性能) * *//*var a=[1,2,3];var b=[1,2,3];alert(a==b); //false*//*var a=5;var b=a;b+=3;//alert(b);//基本类型:赋值的时候只是复制alert(a);*//*var a=[1,2,3];var b=a;b.push(4);//alert(b);//[1,2,3,4]//对象类型:赋值不仅是值的复制,而且也是引用的传递alert(a);//[1,2,3,4]*//*var a=[1,2,3];var b=a;b=[1,2,3,4];alert(b); //[1,2,3,4]alert(a); //[1,2,3]*///比较var a=5;var b=5;//基本类型:值相同就可以alert(a==b); //truevar a1=[1,2,3];var b1=[1,2,3];//对象类型:值和引用都相同才行alert(a1==b1); //falsevar a2=[1,2,3];var b2=a2;//对象类型:值和引用都相同才行alert(a2==b2); //true
原型
/*原型-prototype概念去改写对象下面公用的方法或者属性,让公用的方法或者属性在内存中存在一份(提高性能)学习原型类比:CSS中的Class通过原型改写工厂方式原则相同的属性和方法可以加在原型上混合的编程模式总结面向对象写法构造函数加属性,原型加方法function 构造函数(){this.属性}构造函数.原型.方法=function(){} var 对象1=new 构造函数(); 对象1.方法(); * *//*var arr=[1,2,3,4];var arr1=[2,2,2,2,2,2,2];arr.sum=function(){var result=0;for (var i=0;i<this.length;i++) {result+=this[i];}return result;}arr1.sum=function(){var result=0;for (var i=0;i<this.length;i++) {result+=this[i];}return result;}alert(arr.sum());alert(arr1.sum());*/var arr=[1,2,3,4,5];var arr1=[2,2,2,2,2,2,2];Array.prototype.sum=function(){var result=0;for (var i=0;i<this.length;i++) {result+=this[i];}return result;}alert(arr.sum());alert(arr1.sum());Array.prototype.number=20;//优先级高arr.number=10;alert(arr.number); //10
js面向对象
原文地址:https://www.cnblogs.com/yangxue72/p/8342700.html