js中关于原型和this的一些疑问

function Parent(){}

Parent.prototype = {

    console:function(){
    
    let name = "vayne"
    
    console.log(this.name);
    
    }

}

let name = "蝙蝠侠";

let a = new Parent();

a.console.call(name);

这段代码为什么没有输出 蝙蝠侠?
另外如果是

a.console(name)

是不是应该输出vayne?

阅读 2.1k
3 个回答

call/apply 方法可以改变 this 的指向。
对于 a.console.call(name),name 虽然是基本数据类型,但会被悄咪咪地转换为对应的基本包装类型对象(此处即 String)。你可以在 console 方法中打印 this 看看。那么对于该对象,是没有 name 属性的。因此会打印 undefined。
至于 a.console(),网上有关于 this 指向的总结,适用于大部分场景。之所以这么说,是因为在一些情况下,那个结论无法解释的通,但是对于日常开发而言是足够的了。其中一个情况就是函数被作为对象的方法调用时,方法内部的 this 指向为该对象。即此时 console 方法内部的 this 指向对象 a,而 a 也是没有 name 属性的,因为在构造函数 Parent 中并没有给实例对象赋予任何变量或方法。

字符串(或者说基本数据类型)调用一个方法..... 这种写法,没有任何意义

输出的是undefined,因为this.name也就是a.name从来都没有被赋值。string也没有name的属性,所以都是undefined.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题