JavaScript面向对象编程基础

创建一个对象
1.在Javascript中可以用new Object来创建一个对象,如:
备注:trace是我在JS中自定义的一个方法,下同。

//1.使用Object创建一个对象
var obj1=new Object();
obj1.property="I am a property of obj1";
obj1.foo=function(){
trace("I was called by the function of obj1");
}

2.另外,我们还可以用一对大括号来创建对象:

//2.使用大括号{}创建一个对象;
var obj2={};
obj2.property="I am a property of obj2";
obj2.foo=function(){
trace("I was called by the function of obj2");
};

3.或者用下面的方法,在大括号内创建属性和方法:

//3.在{}内直接定义属性,每个属性之间用逗号","间隔;
var obj3={
property:"I am a property which is declared in {}",
foo:function(){
trace("I was called by the function declared in {}");
}
};

有个小细节,用第三中方法,记得在声明结束时加上分号,虽然不加也不会提示错误,
后面在创建类的时候,你就会发现区别了。
这三种方法的缺点是,所创建的对象都无法进行重用,所有的方法和属性都是公共的。
创建一个类
在JS中没有Class这概念,它的类创建是通过function实现的,如下:

//用function创建一个类MyClass
function MyClass(){
var property="I am a property of MyClass";
var foo=function(){
trace("I am a function of MyClass");
}
foo();
}
//实例化类对象
var mc=new MyClass();

OOP特性在JS中的体现
说完了对象和类,下面我们来谈谈面向对象编程的几个基本特性
1.公共和私有空间
JS中的公共属性和方法都以"this."开头,而且在引用的时候,不论是在类外或类内,都要用this.来调用。
私有方法则是用var在类中创建属性或方法。
举例说明如下:

 

//1.公共/私有属性和方法
function MyClass2(){
//所有用var声明的属性或方法都是私有的
var privateProperty="I am a private Property";
var privatefoo=function(){
trace("I am private function");
}
//没有用var或this声明的属性或方法默认也是私有的
privateProperty="I am another private property";
privatefoo2=function(){
trace("I am private function too");
}
//用this声明的属性或方法都是公共的
this.publicProperty="I am a public property";
this.publicfoo=function(){
trace("在类内调用公共属性:" + this.publicProperty);
trace("I am a public function");
}
privatefoo2();
}

var mc=new MyClass2();//实例化一个类对象
//
调用私有方法或属性,会报错
//
mc.privatefoo();//用Chrome测试,打开console面板,你会得到这样一个错误, "Uncaught TypeError: Object #<MyClass2> has no method 'privatefoo'"
//
trace(mc.privateProperty);//你会得到这样的一个错误"Uncaught TypeError: Object #<MyClass2> has no method 'privatefoo'"
//
调用公共方法和属性
mc.publicfoo();//I am a public property
trace(mc.publicProperty);//I am a public property

2.继承
JS的类继承,又叫做原式继承,通过设定类的property属性实现,举例如下:

//2.继承
function Base(){
this.baseProperty="I am base Property";
this.hello=function(){
trace("hello world");
}
}
Sub.prototype=new Base();
function Sub(){

}
var s=new Sub();
//调用父类的属性和方法
trace(s.baseProperty);
s.hello();

3.静态方法和属性
直接在类名称后面追加属性或方法,即可创建静态方法或属性:

//3.静态方法和属性
function MyClass3(){};
MyClass3.staticProperty="I am a static property";
MyClass3.staticFoo=function(){
trace("I am a static function");
}
MyClass3.staticFoo();

4.反射
通过设置类的constructor属性,将其指向另外一个类对象,可以反射到这个类的引用,如下:

//4.反射
function Class1(){
this.property="hello Class1";
}
var c1=new Class1();
var Class2=c1.constructor;
var c2=new Class2();
trace(c2.property);









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值