2 sindelhok sindelhok 于 2015.07.21 17:01 提问

javascript面向对象的问题

请教一下各位大神. 今天写JS时候遇到这样一个问题, 就是下面这段js代码不要②这一行的时候,是可以正常运行的,浏览器没有报错.
但是加了这一行,就报错. 只有把①②改成this.name和this.age才可以. 能给我讲讲为什么嘛

var p = { name:'stephen', age:23, info:function(){ document.write('我的名字是:' + name①); document.write('我的年龄:' + age②); } } p.info();

2个回答

danielinbiti
danielinbiti   Ds   Rxr 2015.07.21 17:11
已采纳
 var p = { name:'stephen', age:23, info:function(){ document.write('我的名字是:' + name①); document.write('我的年龄:' + age②); } } p.info();
 不管1,2实际都不是你预期的,没加2能运行,是因为name刚好是window的全局变量,所以没报错,但实际不是你想要的。
 这里应该改成
 var p = { name:'stephen', age:23, info:function(){ document.write('我的名字是:' + p.name); document.write('我的年龄:' + p.age); } } p.info();
 因为你的name和age是p这个对象内的属性。所以要加上p
danielinbiti
danielinbiti 回复沧海残阳: 恩,this的指向看 . 前面,这里p.info(),那就是this指p,这种方式90%是对的。
2 年多之前 回复
sindelhok
sindelhok 回复danielinbiti: 我估计是因为我是在var p{ } 内写的info:function( ){ } , 将这个function挂载到了info属性下面, 所以用this.age出现了正确结果. 如果是var p = function( ){ } 那么里面的方法就直接挂载到window下面了,this就指代了window. 也不知道对不对. 非常感谢大神耐心教授
2 年多之前 回复
danielinbiti
danielinbiti 回复沧海残阳: 不一样,this指的是window,不是p,所以this.name是取不到的。
2 年多之前 回复
sindelhok
sindelhok 原来是window内置对象,谢谢大神,明白了. 追问一下,在这里p.name和p.age; 写成this.name和this.age,应该表达的是一样的意思吧?
2 年多之前 回复
CSDNXIAOD
CSDNXIAOD   2015.07.21 17:06

JavaScript中的面向对象
javascript面向对象
JavaScript面向对象特性
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

Csdn user default icon
上传中...
上传图片
插入图片