JavaScript是基于对象的语言。
JavaScript中没有class,一般把类叫做原型对象。
js创建对象的方式:
1.工厂方法–使用new Object创建对象并添加属性
2.使用构造函数来定义类(原型对象)
3.使用prototype
4.构造函数及原型混合方式
5.动态原型方式
在js中一切皆对象
function person(){
}
var a=new person();
window.alert(a.constructor); //输出a的构造函数
window.alert(typeof a); //a的类型
访问对象的属性的方法:
1.对象名.属性
2.动态访问
对象名[“属性名”]
function person(){};
var p=new person();
p.name="小明";
window.alert(p.name);
var v="na"+"me";
window.alert(p[v]);
释放对象内存:
function person(){};
var a=new person();
a.age=100;
a.name="小明";
var b=a;
b.name="小红";
window.alert(b.age+b.name+a.name);//输出为100小红小红
b=null;
a=null;
delete 对象名.属性,也会立即释放内存
关键字this
我们很多时候需要这样的需求,当我们创建了一个对象后,就希望他们自动拥有某些属性。
当我们这样会提示undefined
function person(){}
var a=new person();
window.alert(a.name)
而这样仍然不行,因为这样定义是私有的,仅仅在函数内部使用,可以在函数内部定义一个公开的方法。
function person(){
var name="小李";
}
var a=new person();
window.alert(a.name)
用this可以解决
哪个对象调用this所在的函数,那么this就代表哪个对象
function person(){
this.name="小明";
this.age=20;
}
var a=new person();
window.alert(a.name);
function person(){
this.abc=function(){
window.alert(this.v);
}
}
var a=new person();
a.v="小明";
a.abc();
function 类名() {
this.属性名 //公开属性
var 属性名 //私有属性
}
function person(){
this.name="tiger";
this.age=100;
this.abc=function(a1,a2){
window.alert(this.name+" "+this.age+" "+a1+" "+a2)
}
}
var v=new person();
v.abc(); //这个调用输出tiger 100 undefined undefined
v.abc("lisa","bob");//这个输出tiger 10 Lisa bob
function person(){
this.name="tiger";
this.age=100;
this.abc=function(a1,a2){
window.alert(this.name+" "+this.age+" "+a1+" "+a2)
}
}
var v=new person();
v.name="dog"; //会将tiger覆盖
v.abc();
v.abc("lisa","bob");
function dog(){}
var d1=new dog();
d1.sound=function(){
window.alert("汪汪");
}
d1.sound(); //正确调用
var d2=new dog();
d2.sound(); //将会报错
当我们希望所有对象共享一个函数时:
function dog(){}
var d1=new dog();
dog.prototype.sound=function(){
window.alert("汪汪");
}
d1.sound();//d1可以正确调用
var d2=new dog();
d2.sound(); //d2也可以正确调用
object类
它是所有js的基类。
通过Object创建对象:
var v=new Object();
v.name="小明";
给类添加方法
var v=new Number(10);// 相当于var v=10
Number.prototype.add=function (a) {
return this+a;
}
window.alert(v.add(20).add(30));//输出60
js不支持函数的重载,多个函数名相同,只调用最后一个
function test(a){
window.alert(a);
}
function test(a,b) {
window.alert(a+","+b);
}
test(5); //输出的5,undefined
function test(a,b){
return a+b;
}
function test(a,b,c) {
return a+b+c;
}
window.alert(test(1,2)); //输出NaN
window.alert(test(1,2,3)); //输出6
未完待续。。。。。。