继续问个构造函数的问题

function Foo(){
    getName = function(){
        console.log('1');
    }
    return this;
}
            
Foo.prototype.getName = function(){
    console.log('2');
}
            
new Foo().getName();

为何打印出来的是2
我是认为1

阅读 1.8k
4 个回答

Foo函数里面getName的写法不就是变量赋值,而且没用var或者let等声明,严格模式下还会报错,如果是this.getName = xxx的写法,打印的就是1了

构造函数实例化的对象拥有什么属性取块于函数体内给this扩展了什么属性,你这个函数体内没有通过 this.getName 那么他会使用原型上的 getName 函数

构造函数Foo里面的getName 是声明了一个全局变量getName 跟Foo自身没有关系

新手上路,请多包涵

上面的只是单纯定义一个getName方法,下面把getName挂到原型上
执行了后Foo上面没有getName方法,只能往原型上找所以输出的2

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