2 zzzcsd zzzcsd 于 2016.02.26 10:53 提问

Javascript,定义一个类
 var Student=function(){
            this.greet=function(){console.log("hello");};
};
Student.prototype={
go:function(){console.log("byebye");}
}

定义一个类,应该把这个类的实例方法,写在构造函数里面,还是挂在prototype上面?为什么?
valueOf,toString,如果要重写这两个函数,应该写在构造函数中,还是prototype上面?

2个回答

showbo
showbo   Ds   Rxr 2016.02.26 11:05

方法建议prototype,这样每个对象自动继承,普通类型数据也可以放在prototype,对象之类的数据不要放prototype里面,要不其中一个实例修改过都会影响到其他实例的值,除非你有这种需要

 Student.prototype={
go:function(){console.log("byebye");}
attr:{a:1,b:2}//其中一个实例对attr的修改都会影响到其他实例的attr属性
}

对于方法,直接this.xxx会每次生成新对象存储函数,prototype函数是公用的。普通属性prototype或者this都可以,这个没区分,会自动拷贝一份给实例

valueOf,toString放prototype或者this.xxx都可以,应为是方法建议prototype

yishuixs
yishuixs   2016.02.27 17:29

1、你都说了是实例方法,而非原型方法,所以只能放在构造函数里。

2、重写valueOf()、toString()两个方法,如果你的范围是这个类,那么就写入到原型中,如果让每一个对象都重写,那么就写进你要重写的对象类型的原型中,比如Object.prototype.value = fn、Function.prototype.toString = fn等

望采纳

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!