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

来源:15-12 原型和原型链-解答2-写一个贴近实际开发原型链继承的例子

朱智硬

2018-07-22

请问能不能写成这样

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');

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

写回答

2回答

双越

2018-07-22

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

1
4
_小怪
回复
双越
好的,明白了。
2019-05-29
共4条回复

qq_天道飘渺_0

2018-08-01

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

0
1
双越
理论上来说是这样的
2018-08-31
共1条回复

BAT大牛带你横扫初级前端JavaScript面试(第二版)

BAT高级前端工程师亲授,结合真实面试题,提高面试成功几率

4268 学习 · 817 问题

查看课程