问一个构造函数的问题

Test.prototype.name = "123";
Test.prototype = {name:'abc'};

请问这两句话的区别在哪?感觉都是给其的name属性修改值?

function Test(){}
Test.prototype.name = "123";
var test =new Test();
Test.prototype = {name:'abc'};
console.log(test.name);

为毛还是123,感觉后面已经修改成了abc

阅读 1.5k
2 个回答

上面的是修改prototype的一个属性,下面的是把整个prototype都改了

这个其实是个八股文,首先回复你的问题。
你代码的第二行是给原型扩展了一个 name 属性取值是 "123"
然后你实例化了一个 test 变量,这个变量的原型是 {name: 123} 这样的
接着你又修改了 Test 构造函数的原型,从现在开始你再使用 Test 构造函数实例的对象原型是 {name: 'abc'}
而你第二行实例对象的原型还是指向以前的 {name: '123'},以前实例化的对象并不会因为你后来修改原型对象引用而自动改变

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