js面向对象的成员函数



如果我们希望某个对象创建后,自动有方法使用,可以在定义类的时候,直接指定成员函数

第一种方法: 动态的给某个对象指定函数  
function Person(name,age)

{ this.name=name;   

this.age=age; }   

 //第一种方法,动态添加  

function speak()

{ document.write("我是"+this.name);   }

 //创建一个对象实例  

 var p1=new Person("大黄",90);  

 p1.fun1=speak; //相当于动态的给p1对象分配一个fun1属性(函数);

你可以理解, fun1 是 speak函数别名     

window.alert(p1.fun1);  

p1.fun1();  

speak(); //window 
第一种方法还有一种体现形式
//创建一个对象实例

var p1=new Person("大黄",90);  

p1.fun1=function speak()

{ document.write("我是"+this.name); };

//相当于动态的给p1对象分配一个fun1属性(函数);


第二种方法: 让所有的Person对象实例都有某个成员函数
//给所有对象分配函数
   function Person(name,age)

  {  this.name=name;   

     this.age=age;    

     this.speak=function ()

  {document.write(this.name+"hello");     }  

  }   

 var p1=new Person("小孩",9);  

 p1.speak();  

 var p2=new Person("大明",30);  

 p2.speak();


☞ 关于给对象指定成员函数说明:
如果添加的内部函数,该函数也称为特权函数, 所谓特权指的是可以访问对象的私有属性. 
如果添加的是外部函数(给某个对象指定的函数),则这样指定函数,只能访问对象的公开属性,不能访问私有属性. 
function Person(name,age,salary)

{ this.name=name;//公开  

 this.age=age;//公开  

 var salary=salary;//私有     }  

 var p1=new Person("宋江",34,1000);

function showInfo()

{   document.write(this.name+this.age+salary);//这里salary是私有  }  

p1.showInfo=showInfo;  

p1.showInfo();

一个类中可以有公开的函数

this.属性=funciton (){};



一个类中也可以有私有的函数
代码:
function Person()

{  this.name="abc";   

   var salary=900;   

   this.fun1=function ()

   { //代码  

     sayHello();  }   

     this.fun2=function()

    {  sayHello(); }   

     this.fun3=function()

    {     sayHello();    }   

    function sayHello()

    {   document.write("hello,资源打开"+this.name+" "+salary);   }  

    }  

    var p1=new Person();  

    p1.fun2(); 

小结: 通过代码我们可以看出.私有函数可以被 该类的其它方法(公开)调用,

同时私有函数可以去访问 该对象的 公开或者私有的属性.
小结: 通过代码我们可以看出.私有函数可以被 该类的其它方法(公开)调用,同时私有函数可以去访问 该对象的 公开或者私有的属性.


第三种方式给所有的对象实例添加方法(原型法)[推荐..] 

function Dog()

{   /* this.shout=function ()

{    document.write("小狗汪汪叫");   }*/  }  

//原型法 

Dog.prototype.shout=function ()

{   document.write("小狗叫");  } 

var dog1=new Dog(); 

dog1.shout();
对我们原型法的一个实际运用: 

 /*
请思考给 js 的 Array 对象扩展一个find(val) 方法 ,当一个Array对象调用该方法的时候,

如果能找 到val则返回其下标,否则返回-1  

*/ 

Array.prototype.find=function(val)

{      //顺序查找   for(var i=0;i<this.length;i++)

{    if(val==this[i]){     flag=true;     return i;    }  

}    

 return -1;  }
var arr=[4,590,-1,890]; 

window.alert(arr.find(890));


自定类的工厂方法(了解即可)
当你编写 js 代码时,当你需要一个对象时,可以通过new Object 来创建一个对象,

然后再动态的给该对象添加属性和方法. 
//工厂法创建对象 

var obj=new Object();  

obj.name="大明";
obj.show=function (val)

{   window.alert("ok"+val);  } 
obj.show("hello");


Number类 
var i=90;
var res=i.add(78).add(90).add(900).add(9000) 
window.alert(res);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值