javascript面向对象编程
var a=100,b=0;
c=a||b;
alert(c) --->100(返回其中第一个不为false的值,或最后一个值)
var a=true,b=false;
c=a||b; --->true
//with简化作用
with(d){
getFullyear();
}
数组-->字符串
array.join(";");
javascript函数不支持重载
在javascript里面一切都是对象,函数时特殊的对象
1.闭包
函数里面嵌套函数形成闭包
1.闭包
2.函数的作用域,this
所有的变量属于windows的
var obj2=new Object(gs is b1);
obj2.v="this is b1"//等价于 var obj2={v:"this is b1"}
2.//作用域Scope
var b1={v:"this is b1"}
var b2={v:"this is b2"}
function b(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"); //this is b1
b.appaly(b2,["111","dddsf"])//输出 this is b2
//扩充一下
var b3 ={v:"this is b3",SayHello:function(){
alert(this.v)
}}
b3.sayHello();
3.可变函数(...),内部类
一:js如何定义一个类
java:
class Person{
private String name;
}
js:
function Person(name){
this.name=name;
}
二:javascript中,一切都是对象,包括类(函数)也是一个对象
Number
Date
Function
三:使用类,创建对象
var obj =new Object();
obj.name="sdfasdf";
//平时调用函数
var v =Person("张三"); //v的值返回的是undefined
//当成类,这个函数就就算构造函数
var p =new Person("张三"); //p就是一个person类的实例,p是一个对象,里面name属性
四.封装
function Person(name){
var y =10; //y是私有变量
this.name=name;
}
var p =new Person(); //y就不再被其他的变量
使用,就垃圾回收器回收
五.闭包-->函数里面嵌套函数
function Person(name){
var y =10; //y是私有变量
this.name=name;
this.sayHello=function(){ //这是一个闭包
y++;
alert(thiis.name+y);
}
}
var p =new Person(); //y不会被垃圾回收器回收
p.sayHello(); //这个函数可以访问封装起来的y
六。作用域scope,上下文
funciton sayHello(){
alert(this.v);
}
sayHello();//函数中的this是window
window.sayHello();//所有的变量默认都存在window这个对象中
var v1 ={v:"this is v1"} //直接使用{}来定义一个javascript对象
alert(v1.v); //访问对象的属性
alert(v1["v1"]); //使用类似于数组的方式访问v这个属性
//所有的函数下面都call,apply 这两个方法,还有一个属性prototype
sayHello.call(v1);//代表执行一个函数,把函数的作用域设置v1,输出this is v1(用可变参数)
sayHello.apply(v1);//一样效果,apply需要数组[]来调用的函数的传递参数
七.扩展已有javascript类,使用prototype
var d=6;
//实现给Number类添加一个名为add的方法
d.add(8).add(9)
//使用prototype(函数上才有prototye属性)
Number.prototype.add=function(v){
return v++;
}
//扩展自己的类
function Person(name){
this.name =name;
}
Person.prototype.sayHello=function(){
alert(this.v);
}
var p =new Person("张三");
p.sayHello();
八.继承
function classA(name){
this. name =name;
this.sayHello=funciton(){
alert(this.name);
}
}
//让classB继承classA
function classB(){
this.tempMethod=classA;
this.tempMethod(name);
}
bar b =new classB("李四");
b.sayHello();
//上面的classB构造函数可以改一下
funciton classB(name){
classA.call(this,name);
}
function classB(name){
classA.apply(this,name);
}
九.可变参数
function sum(){
var s =0;
for(var i=0;i<arguments.length;i++){
s+=arguments[i];
}
return s;
}
//调用
sum(1,4,5);
sum(11,49,55,3567,45656,567,66)
十。||这个操作符,返回的第一个不为false,"",0,null......这些代表逻辑假的值
funciton doSomething(e){
e=e||window.event;
}
var a=100,b=0;
c=a||b;
alert(c) --->100(返回其中第一个不为false的值,或最后一个值)
var a=true,b=false;
c=a||b; --->true
//with简化作用
with(d){
getFullyear();
}
数组-->字符串
array.join(";");
javascript函数不支持重载
在javascript里面一切都是对象,函数时特殊的对象
1.闭包
函数里面嵌套函数形成闭包
1.闭包
2.函数的作用域,this
所有的变量属于windows的
var obj2=new Object(gs is b1);
obj2.v="this is b1"//等价于 var obj2={v:"this is b1"}
2.//作用域Scope
var b1={v:"this is b1"}
var b2={v:"this is b2"}
function b(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"); //this is b1
b.appaly(b2,["111","dddsf"])//输出 this is b2
//扩充一下
var b3 ={v:"this is b3",SayHello:function(){
alert(this.v)
}}
b3.sayHello();
3.可变函数(...),内部类
一:js如何定义一个类
java:
class Person{
private String name;
}
js:
function Person(name){
this.name=name;
}
二:javascript中,一切都是对象,包括类(函数)也是一个对象
Number
Date
Function
三:使用类,创建对象
var obj =new Object();
obj.name="sdfasdf";
//平时调用函数
var v =Person("张三"); //v的值返回的是undefined
//当成类,这个函数就就算构造函数
var p =new Person("张三"); //p就是一个person类的实例,p是一个对象,里面name属性
四.封装
function Person(name){
var y =10; //y是私有变量
this.name=name;
}
var p =new Person(); //y就不再被其他的变量
使用,就垃圾回收器回收
五.闭包-->函数里面嵌套函数
function Person(name){
var y =10; //y是私有变量
this.name=name;
this.sayHello=function(){ //这是一个闭包
y++;
alert(thiis.name+y);
}
}
var p =new Person(); //y不会被垃圾回收器回收
p.sayHello(); //这个函数可以访问封装起来的y
六。作用域scope,上下文
funciton sayHello(){
alert(this.v);
}
sayHello();//函数中的this是window
window.sayHello();//所有的变量默认都存在window这个对象中
var v1 ={v:"this is v1"} //直接使用{}来定义一个javascript对象
alert(v1.v); //访问对象的属性
alert(v1["v1"]); //使用类似于数组的方式访问v这个属性
//所有的函数下面都call,apply 这两个方法,还有一个属性prototype
sayHello.call(v1);//代表执行一个函数,把函数的作用域设置v1,输出this is v1(用可变参数)
sayHello.apply(v1);//一样效果,apply需要数组[]来调用的函数的传递参数
七.扩展已有javascript类,使用prototype
var d=6;
//实现给Number类添加一个名为add的方法
d.add(8).add(9)
//使用prototype(函数上才有prototye属性)
Number.prototype.add=function(v){
return v++;
}
//扩展自己的类
function Person(name){
this.name =name;
}
Person.prototype.sayHello=function(){
alert(this.v);
}
var p =new Person("张三");
p.sayHello();
八.继承
function classA(name){
this. name =name;
this.sayHello=funciton(){
alert(this.name);
}
}
//让classB继承classA
function classB(){
this.tempMethod=classA;
this.tempMethod(name);
}
bar b =new classB("李四");
b.sayHello();
//上面的classB构造函数可以改一下
funciton classB(name){
classA.call(this,name);
}
function classB(name){
classA.apply(this,name);
}
九.可变参数
function sum(){
var s =0;
for(var i=0;i<arguments.length;i++){
s+=arguments[i];
}
return s;
}
//调用
sum(1,4,5);
sum(11,49,55,3567,45656,567,66)
十。||这个操作符,返回的第一个不为false,"",0,null......这些代表逻辑假的值
funciton doSomething(e){
e=e||window.event;
}