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(){}
name:"zhangsan",
alert(this.name);
function 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(){}
Child.extend(Person);
// for(var p in Person.prototype){
// Child.prototype[p]=Person.prototype[p];
// }
共有成員、私有成員和靜态成員
Javascript并沒有專門的機制來處理這些便量
想Java中我們通常定義類的時候會這麼寫
* public class Person{
* private String name;
* public void setName(String name){
* this.name=name;
* }
* public String getName(){
* return this.name;
* }
而Javascript中我們得這麼寫
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();
注意:一個類的執行個體不能調用這個類的靜态方法