请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

通过直接访问实例的变量,还是可以打印的。

https://img1.sycdn.imooc.com//szimg/5c876bdc0001acfb12681108.jpg

不好意思,图片忘记加了。

我的意思是,通过实例student.name还是可以访问实例的变量的。

正在回答 回答被采纳积分+3

4回答

print_蓝_ 2020-03-24 02:47:07

不谈这种行为有没有意义啊,单看原理,以之前学js的观念来看,首先29行student实例化先执行,即全局变量里已经有了student这个变量,然后才执行30行和31行,且都是调用实例的plus_sum和add这两个方法,这两个方法运行环境实际上也是在全局环境下执行,就等于在全局环境下直接执行plus和add这两个函数,那么自然能获取到全局里的student这个实例对象,故student.name能获取到值,同样调用实例方法也可以这么取,原因还是执行环境

而之所以实例方法能用self.name是因为,你实例方法定义时传入了self,这个self指向被实例化对象本身,且需要用实例去调用,self和js里的this有点类似

当然,类方法也可以调用实例方法,但是调用时你需要传入实例化对象,按上图举个例子就是:Student.实例方法(student),目的让方法里的self有指向这个传入的实例化对象


0 回复 有任何疑惑可以回复我~
爱吃apple的阿狸 2019-10-15 18:19:52

这算是多此一举,类方法和静态方法就是用来在不实例化对象的时候调用的。你这样定义类,不是强行要先实例化才能使用这些方法么,一旦你不实例化对象,就会报错的。

0 回复 有任何疑惑可以回复我~
7七月 2019-03-12 16:54:47

不是 你把代码截全。我没看懂你这里student在外部定义的一个变量,是怎么在内部调用的?

0 回复 有任何疑惑可以回复我~
7七月 2019-03-12 00:51:49

什么意思?

0 回复 有任何疑惑可以回复我~
  • 提问者 慕的地6863477 #1
    不好意思,忘记上传图片了
    回复 有任何疑惑可以回复我~ 2019-03-12 16:21:30
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信