js类,构造函数内添加方法,与prototype添加方法的时序差异

看下面的例子:

	$('button.b').click(function(){
		var d = new O1();
		d.ooo();
		d.oo();
		function O1(){
			this.ooo = function(){
				alert('sss');
			}
		}
		O1.prototype.oo = function(){
			alert('ss');
		}
	});

点击按钮,首先会弹出“sss”,标识ooo()执行了,但是,之后会报错:”d.oo is not a function“
具体原因,我猜是这样:
再new O1的对象的时候,回去找O1的构造函数“function O1()”,然后执行这个构造函数的时候,将ooo()方法添加给O1类,但这时并不会执行构造函数之外的东西
而“O1.prototype.oo”会按照顺序,执行完前面的代码后,再添加oo()

One comment

  • 2012 年 12 月 07 日 - 下午 1:36 | Permalink

    因为 这 等于覆盖 ol 的原型,原来的 ol 并没有 oo() 方法,自然报错。

  • 发表评论

    电子邮件地址不会被公开。 必填项已用 * 标注

    *

    *