构造函数和成员函数

本文介绍了JavaScript中如何在对象中定义成员函数,包括添加不同类型的函数以及如何通过原型法实现函数代码共享。讨论了使用==号进行比较时的不同情况,并给出了若干案例分析,展示了成员函数的调用和作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 北京 天津;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值