1.对象-成员函数(方法)
比如:我们希望对象不但有属性,还希望它有行为(行为在程序中要靠函数来体现)
(1)添加speak函数,输出我是一个好人;
(2)添加jisuan函数,可以计算从1+…+1000的结果
(3)修改jisuan函数,该方法可以接收一个数n,计算从1+…+n的结果
(4)添加add成员函数,可以计算两个数的和
function Person(name,age){
//这个就是使用传入的实际参数,初始化属性
this.name=name;
this.age=age;
//输出自己的名字,这里this.show就是一个公开的函数,函数名是show
this.show=function(){
document.write("名字="+this.name);
}
//添加jisuan函数,可以计算从1+...+1000的结果
this.jisuan=function(n){
var res=0;
for(var i=1;i<=n;i++){
res+=i;
}
return res;
}
}
var p1=new Person("小白",90);
p1.show();
document.writeln("res="+p1.jisuan(10));
2.给一个对象添加(指定)函数的几种方式
(1)方式一
function Person(){
this.name="abc";
this.age=900;
this.abc=function show1(){
window.alert("hello"+this.name);
}
}
var p1=new Person(); //创建一个p1对象
p1.abc(); //调用
(2)方式二
function Person(){
this.name="abc";
this.age=900;
}
function show1(){
window.alert("hello"+this.name);
}
var p1=new Person(); //创建一个p1对象
p1.abc=show1; //把show1函数,给p1.abc
p1.abc(); //调用
思考:window.alert(p1.abc)和window.alert(show1)会输出什么?
都会输出函数:
function show1(){
window.alert("hello"+this.name);
}
(3)方式三
function Person(){
this.name="abc";
this.age=900;
}
var p1=new Person();
p1.abc=function show1(){
window.alert("hello"+this.name)
};
p1.abc();
(4)方式四
前面的几种方法有一个问题:那就是每个对象独占函数代码,这样如果对象很多,则会影响效率,js设计者给我们提供另一个方法:原型法。这样多个函数可以共享函数代码,代码如下:
function Dog(){
}
//使用prototype类去绑定一个函数给shout
Dog.prototype.shout=function(){
window.alert("小狗");
}
var dog1=new Dog();
dog1.shout();
var dog2=new Dog();
dog2.shout();
代码原理说明:
注意:==号的作用:
(1)当==的两边都是字符串的时候,则比较内容相等否。
(2)如==两边是数字,则数的大小是否相等。
(3)如==是对象或者是对象函数,则比较地址是否相等。
3.针对以下案例输出是什么?
(1)案例一
function Person(){
this.name="abc1";
this.age=900;
}
function show1(){
window.alert("hello"+this.name);//这个this指window,此时this.name为空
}
var p1=new Person();
p1.abc=show1;
show1();
输出 hello空格;
(2)案例二
function Person(){
this.name="abc1";
this.age=900;
}
var name="北京";
function show1(){
window.alert("hello"+this.name); //this.name为北京
}
var p1=new Person();
p1.abc=show1;
show1();
输出hello北京;
(3)案例三
function Person(){
this.name="abc";
this.age=900;
this.abc=function(v1,v2){
window.alert(this.name+" "+this.age+" "+v1+" "+v2);
}
}
var p1=new Person();
p1.abc();
p1.abc("北京","天津");
第一个输出abc 900 undefined undefined;
第二个输出abc 900 北京 天津;
(4)
function Person(){
this.name="abc";
this.age=900;
this.abc=function(v1,v2){
window.alert(this.name+" "+this.age+" "+v1+" "+v2);
}
}
var p1=new Person();
p1.name="中国"; //动态添加一个属性,此时p1.name会代替this.name
p1.abc();
p1.abc("北京","天津");
输出中国 900 北京 天津;