请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

请问能否直接把拓展的方法写在构造函数Elem()里,而不用.prototype?

请问能不能写成这样

function Elem(id){
	this.elem = document.getElementById(id);
	this.html = function html(val){
		var elem = this.elem;
		if(val){
			elem.innerHTML = val;
			return this;
		}else{
			return elem.innerHTML;
		}
	}
}


var form = new Elem('form');
form.html('aaa');

我拿百度的首页试了一下  可以运行。 请问这两种方法有优劣吗?

正在回答 回答被采纳积分+3

2回答

双越 2018-07-22 21:50:57

对于这个例子,没啥影响。但是这样写没法做到继承。例如,Object.prototype.toString 可以被所有对象继承使用,但是如果 toString 是按照你的方式来写的,那就没法被继承使用了。

1 回复 有任何疑惑可以回复我~
  • 莫非这就是所谓的组合式继承中改进了基于原型继承的缺点(prototype一改所有的实例都会发生改变)?
    回复 有任何疑惑可以回复我~ 2018-08-30 22:30:43
  • _小怪 #2
    老师,意思是不是如果不写在原型中,直接放在构造函数内部,那么能使用toString方法的只有直接由Object new的儿子对象才能使用,但是孙子对象或重孙对象就无法使用toString,通过原型操作就可以实现多继承是吗?
    回复 有任何疑惑可以回复我~ 2019-05-28 20:03:45
  • 双越 回复 _小怪 #3
    是这个意思。
    回复 有任何疑惑可以回复我~ 2019-05-28 21:21:12
qq_天道飘渺_0 2018-08-01 17:12:55

这样写的话,好像每次实例化都做一次添加,如果方法多了是不是影响性能

0 回复 有任何疑惑可以回复我~
  • 双越 #1
    理论上来说是这样的
    回复 有任何疑惑可以回复我~ 2018-08-31 10:28:48
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信