为了账号安全,请及时绑定邮箱和手机立即绑定

请问怎么区分js 是重写原型对象还是在给原型对象添加方法?

请问怎么区分js 是重写原型对象还是在给原型对象添加方法?

加油js 2016-04-20 14:39:01
function Person(){}; var xiaoming = new Person(); Person.prototype = {     constructor: Person,     sayHi: function(){         console.log('hi')     } } xiaoming.sayHi(); // err我看到别人重写原型对象的例子是这个,但是在慕课看到有人提问的PageSwitch.prototype={ init:function(){ } }说是给原型对象添加方法?请问哪里不一样?
查看完整描述

1 回答

已采纳
?
qq_青枣工作室_0

TA贡献446条经验 获得超754个赞

Person.prototype = {
    constructor: Person,
    sayHi: function(){
        console.log('hi')
    }
}

上面代码把Person.prototype指向到一个新的对象。

但是,在此之前的 var xiaoming = new Person(); 这个xiaoming的原型依然是指向旧的Person.prototype,不是后面那个新的Person.prototype,所以xiaoming没有sayHi这个方法。

所以,你应该直接在旧的Person.prototype上添加方法。

function Person(){};
var xiaoming = new Person();
Person.prototype.sayHi = function(){
    console.log('hi')
}
xiaoming.sayHi();

不一样的地方就在于,在修改Person.prototype之前,已经new创建的对象都可以使用新增的方法。

如果,你把Person.prototype直接等于一个新的对象,那之前new创建的对象就不能使用新增的方法。

查看完整回答
1 反对 回复 2016-04-20
  • 加油js
    加油js
    所以 是因为 有新建实例,所以第一块代码是重写原型对象;而第二块代码没有var %% = new obj() 这个代码,直接是prototype = {} ,于是就是给原型对象添加方法?是这样理解吗
  • qq_青枣工作室_0
    qq_青枣工作室_0
    你提供的两块代码都是直接prototype = {}啊。
  • 1 回答
  • 0 关注
  • 1556 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信