JS 类方法调用

在以下JS代码中调用对象方法、类方法和原型方法,浏览器先弹框出现"People",然后再弹框出现"WindkingundefinedWindking"。出现"undefi... 在以下JS代码中调用对象方法、类方法和原型方法,浏览器先弹框出现"People",然后再弹框出现"Windking undefined Windking"。出现"undefined"可以理解,但是第一次弹框出现"People" 是怎么回事?请诸位指教。
JS代码如下:
<script>
function People(name){
this.name = name;
//对象方法
this.getName1 = function(){
return this.name;
}
}
//类方法
People.getName2 = function(){
alert(this.name);
}
//原型方法
People.prototype.getName3 = function(){
return this.name;
}
var p = new People("Windking");
window.alert(p.getName1()+"\n" + People.getName2() + "\n" + p.getName3());
</script>
展开
 我来答
lglong519
2017-09-04 · TA获得超过713个赞
知道小有建树答主
回答量:1110
采纳率:61%
帮助的人:463万
展开全部
window.alert(p.getName1()+"\n" + People.getName2() + "\n" + p.getName3());

这里先执行括号里所有的内容,再执行最外层的window.alert,

所以读到 People.getName2()  时,函数内的alert就先弹出来了,

因为getName2只有一个alert方法,this.nameObject自带的方法,会返回当前对象的全名,

所以弹出显示People,

构造函数People里虽然有this.name,但是构造函数没实例化是无法调用内部的属性,

所以People.getName2() 返回的是undefined,

追问
谢谢你的回答,我想知道为什么第一次执行 People.getName2() 会弹出 People,这个People是函数名,为什么People.getName2()的 this.name 会返回函数名:People?另外,为什么第一次执行 People.getName2() 会返回 People,第二次执行 People.getName2() 返回undefined呢?
追答
比如:
function fun(){};
fun.name;//=>fun
name属性从Function继承而来的,所有函数对象都可调用,如果把name换成age或其他的就只有undefined了
People.getName2() 这个方法里没有return,所以得到的是undefined
jaramy1111
2017-09-04 · TA获得超过348个赞
知道小有建树答主
回答量:382
采纳率:100%
帮助的人:92.7万
展开全部
分析this所在的函数是当做哪个对象的方法调用的,则该对象就是this所引用的对象。方法1首先赋值了,然后再调用,所以会弹出
更多追问追答
追问
可是,我在方法People(name)中给name赋的值是Windking而非People。而且,既然第一次弹框People.getName2()弹出了 People,为什么第二次弹框是undefined?
追答
首先,第一次弹框是初始化的时候弹出来的,就是在初始化类方法People.getName2的时候弹得,我测试的时候是undefined,然后后边三个的时候跟你的是一样的。

原型方法:一般用于对象实例共享,在原型上面添加该方法,就能实现共享。这样就不用每一次初始化一个实例的时候,为其分配相应的内存了。
对象方法需要通过实例化对象去调用
类方法不需要通过实例化对象去调用
原型方法也需要通过实例化对象去调用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式