javascript的对象,成员方法在原型中的定义错误
写法一代码如下:
// 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,这是为什么呢?
写法二,则是正确的。
这两种写法有何不同?
最好是能找到官方的文档解释,先谢过。
zxnsj
10 years, 11 months ago
Answers
正确的写法是
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
笔墨为你侯
answered 10 years, 11 months ago