可以在构造函数中重写prototype吗? - CNode技术社区

可以在构造函数中重写prototype吗?
发布于 10 年前 作者 Silence-Zhang 5962 次浏览 最后一次编辑是 9 年前 来自 问答

在构造函数中重写了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 一下?

回到顶部

AltStyle によって変換されたページ (->オリジナル) /