可以在构造函数中重写prototype吗?
在构造函数中重写了prototype,访问不了其中的方法. e.g.
function Persion(name,age,job){
this.name=name;
this.age=age;
this.job=job;
Persion.prototype={
sayName:function(){
console.log(this.name);
}
};
}
var per=new Persion('Nicolas','23','software engining');
per.sayName(); //运行时会报错,没有sayName方法
但是把Persion.prototype={...}
放在构造函数外就可以访问…
4 回复
说明… new 的时候先执行 this.__protp__ = Person.prototype;
,再执行Person.apply(this, arguments);
…
下面这个代码可以用。。
function Persion(name,age,job){
this.name=name;
this.age=age;
this.job=job;
Persion.prototype={
sayName:function(){
console.log(this.name);
}
};
}
Persion.prototype = {
sayName: function() {
console.log('default name');
}
}
var per1=new Persion('Nicolas','23','software engining');
per1.sayName();
var per2=new Persion('Nicolas','23','software engining');
per2.sayName();
new 过一次以后Persion的prototype就是楼主想要的对象了。 第一个new函数执行的时候Person.prototype还是一个空对象 输出
➜ ~ node a
default name
Nicolas
btw:构造函数里重写prototype不是好思路…在prototype里面定义的函数已经能访问到this对象了。
instance哭着说,你来晚了sayName
放在外面,构造函数外面。
prototype放里面有啥意义?难道你还想if else 一下?