您好,匿名用户
随意问技术百科期待您的加入

javascript的对象,成员方法在原型中的定义错误

0 投票

写法一代码如下:

// Javascript code
// 在原型中定义成员方法
function MyObject1() { 
	// 写法一
	MyObject1.prototype = { 
		test : function() { 
			window.alert('test_1');
		}
	};
}

function MyObject2() {
	// 写法二
	MyObject2.prototype.test = function() { 
		window.alert('test_2');
	};
}

// test
var o1 =  new MyObject1();
var o2 =  new MyObject2();
o1.test(); // 这个会报错:test is not a function
o2.test(); // 这个正常

写法一,在浏览器中会报错,说 o1.test is not a function,这是为什么呢?
写法二,则是正确的。
这两种写法有何不同?
最好是能找到官方的文档解释,先谢过。

用户头像 提问 2013年 12月23日 @ Lady 上等兵 (162 威望)
分享到:

1个回答

0 投票

正确的写法是

function Object () {
  // blan blan blan
}
Object.prototype = {
    test: function () {
        // blan blan blan
    }
};

你没有弄清Javascript是如何通过构造函数来构建新的对象的。在调用new Object的时候,构造函数Object的prototype是{},为空对象。只有在该构造函数被执行一次后其原型才为{test: function () {}}。你可以尝试一下

// Javascript code
function Object() {
        Object.prototype =  { 
                test : function() { 
                        window.alert('test');
                }
        };
}

// test
var o =  new Object();
o = new Object();
o.test();

这时候test方法是存在的。
还有一个注意点是,请不要使用Object作为构造函数的名称,因为Javascript原生构造函数中已经有Object

用户头像 回复 2013年 12月23日 @ Riven 上等兵 (334 威望)
提一个问题:

相关问题

0 投票
1 回复 28 阅读
0 投票
1 回复 43 阅读
0 投票
1 回复 50 阅读

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...