Javascript面向对象二
Javascript面向对象二
可以通过指定原型属性来对所有的对象指定属性,
Object.prototype.name="zhangsan";
Object.prototype.getType=function(){
var a=typeof(this);
alert(a);
}
var o=new Object();
var o2={};
var d=new Date();
o.getType();
o2.getType();
d.getType();
alert(o.name);
alert(o2.name);
alert(d.name);
//继承
Javascript中没有extends 关键字
但是可以通过类的prototype实现继承
function Person(){
}
Person.prototype={
name:"张三",
show:function(){
alert(this.name);
}
}
function Child(){
}
Child.prototype=Person.prototype;
var c=new Child();
c.show();
当改变Child的原型的show方法的时候,
Person对象的show也就改变了。
Child.prototype.show=function(){
alert("这个方法已经改变了");
}
var p=new Person();
p.show();//提示为这个方法已经改变
为了在改变Child的属性的时候 不改变Person的属性 我们可以通过 for in 和prototype属性来完成继承
function Person(){}
Person.prototype={
name:"zhangsan",
show:function(){
alert(this.name);
}
}
function Child(){}
var c=new Child();
for(var p in Person.prototype){
Child.prototype[p]=Person.prototype[p];
}
Child.prototype.show=function(){
alert("方法已经改变");
}
var p1=new Person();
c.show();//方法已经改变
p1.show();//zhangsan
可以为每一个对象指定一个特有的方法来实现继承
Function.prototype.extend=function(source){
for(var p in source.prototype){
this.prototype[p]=source.prototype[p];
}
}
function Person(){}
Person.prototype={
name:"zhangsan",
show:function(){
alert(this.name);
}
}
function Child(){}
Child.extend(Person);
var c=new Child();
// for(var p in Person.prototype){
// Child.prototype[p]=Person.prototype[p];
// }
Child.prototype.show=function(){
alert("方法已经改变");
}
var p1=new Person();
c.show();//方法已经改变
p1.show();//zhangsan
共有成员、私有成员和静态成员
Javascript并没有专门的机制来处理这些便量
想Java中我们通常定义类的时候会这么写
* public class Person{
* private String name;
* public void setName(String name){
* this.name=name;
* }
* public String getName(){
* return this.name;
* }
* }
而Javascript中我们得这么写
function Person(){
var name;//私有的成员
this.setName=function(nm){
this.name=nm;
}
this.getName=function(){
return name;
}
}
我们可以这么使用了
Var p=new person();
p.setnema("zhangsan");
p.getname();
javascript中定义静态成员和方法
person.staticName="这是一个人";
person.staticMothod=function(){
alert(person.staticNamse);
}
静态的属性和方法可以直接通过类名直接调用
Person.staticMothod();
注意:一个类的实例不能调用这个类的静态方法