JavaScript面向对象编程

javascript面向对象编程

vara=100,b=0;

c=a||b;

alert(c)--->100(返回其中第一个不为false的值,或最后一个值)

vara=true,b=false;

c=a||b;--->true

//with简化作用

with(d){

getFullyear();

}

数组-->字符串

array.join(";");

javascript函数不支持重载

在javascript里面一切都是对象,函数时特殊的对象

1.闭包

函数里面嵌套函数形成闭包

1.闭包

2.函数的作用域,this

所有的变量属于windows的

varobj2=newObject(gsisb1);

obj2.v="thisisb1"//等价于varobj2={v:"thisisb1"}

2.//作用域Scope

varb1={v:"thisisb1"}

varb2={v:"thisisb2"}

functionb(d,r){

alert(this.v+d+r);

}

b("111","ddsf");//输出undefined

window.b("bb","adasd");//输出undefined

//b.call()-->b//call用于执行函数

//b.call(b1)--->b1

//call的第一个次数是表示函数上下文

b.call(b1,"adsfsdf");//thisisb1

b.appaly(b2,["111","dddsf"])//输出thisisb2

//扩充一下

varb3={v:"thisisb3",SayHello:function(){

alert(this.v)

}}

b3.sayHello();

3.可变函数(...),内部类

一:js如何定义一个类

java:

classPerson{

privateStringname;

}

js:

functionPerson(name){

this.name=name;

}

二:javascript中,一切都是对象,包括类(函数)也是一个对象

Number

Date

Function

三:使用类,创建对象

varobj=newObject();

obj.name="sdfasdf";

//平时调用函数

varv=Person("张三");//v的值返回的是undefined

//当成类,这个函数就就算构造函数

varp=newPerson("张三");//p就是一个person类的实例,p是一个对象,里面name属性

四.封装

functionPerson(name){

vary=10;//y是私有变量

this.name=name;

}

varp=newPerson();//y就不再被其他的变量

使用,就垃圾回收器回收

五.闭包-->函数里面嵌套函数

functionPerson(name){

vary=10;//y是私有变量

this.name=name;

this.sayHello=function(){//这是一个闭包

y++;

alert(thiis.name+y);

}

}

varp=newPerson();//y不会被垃圾回收器回收

p.sayHello();//这个函数可以访问封装起来的y

六。作用域scope,上下文

funcitonsayHello(){

alert(this.v);

}

sayHello();//函数中的this是window

window.sayHello();//所有的变量默认都存在window这个对象中

varv1={v:"thisisv1"}//直接使用{}来定义一个javascript对象

alert(v1.v);//访问对象的属性

alert(v1["v1"]);//使用类似于数组的方式访问v这个属性

//所有的函数下面都call,apply这两个方法,还有一个属性prototype

sayHello.call(v1);//代表执行一个函数,把函数的作用域设置v1,输出thisisv1(用可变参数)

sayHello.apply(v1);//一样效果,apply需要数组[]来调用的函数的传递参数

七.扩展已有javascript类,使用prototype

vard=6;

//实现给Number类添加一个名为add的方法

d.add(8).add(9)

//使用prototype(函数上才有prototye属性)

Number.prototype.add=function(v){

returnv++;

}

//扩展自己的类

functionPerson(name){

this.name=name;

}

Person.prototype.sayHello=function(){

alert(this.v);

}

varp=newPerson("张三");

p.sayHello();

八.继承

functionclassA(name){

this.name=name;

this.sayHello=funciton(){

alert(this.name);

}

}

//让classB继承classA

functionclassB(){

this.tempMethod=classA;

this.tempMethod(name);

}

barb=newclassB("李四");

b.sayHello();

//上面的classB构造函数可以改一下

funcitonclassB(name){

classA.call(this,name);

}

functionclassB(name){

classA.apply(this,name);

}

九.可变参数

functionsum(){

vars=0;

for(vari=0;i<arguments.length;i++){

s+=arguments[i];

}

returns;

}

//调用

sum(1,4,5);

sum(11,49,55,3567,45656,567,66)

十。||这个操作符,返回的第一个不为false,"",0,null......这些代表逻辑假的值

funcitondoSomething(e){

e=e||window.event;

}

相关推荐