+ -
当前位置:首页 → 问答吧 → 代码太绕弯了,想不明白,求解脱

代码太绕弯了,想不明白,求解脱

时间:2010-06-04

来源:互联网


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title> </title> <style type="text/css"> *{ margin:0; padding:0; } </style> <script> var Shaka = function(age) { return new Shaka.fn.init(age); }; Shaka.fn = Shaka.prototype = { init: function(age) { this.age = age; return this;}, sayHello: function() { alert('I am a little big baby, my age is ' + this.age + ' years old.'); } }; Shaka.fn.init.prototype = Shaka.fn; Shaka(1).sayHello() </script> </head> <body class="yui3-skin-sam yui-skin-sam"> </body> </html>
 提示:您可以先修改部分代码再运行
var Shaka = function(age) { return new Shaka.prototype.init(age); };
Shaka.prototype = {
       init: function(age) {
              this.age = age;
              return this;
       },
       sayHello: function() { alert('I am a little big baby, my age is ' + this.age + ' years old.'); }
};


Shaka(1).sayHello()

为什么这样就不行.......return this不是也是返回到shaka的实例了吗,应该也能sayHello的啊......不解不解

作者: hotcrab2008   发布时间: 2010-06-04

Shaka.fn.init.prototype = Shaka.fn; // 必须加上,或改为
Shaka.fn.init.prototype = Shaka.prototype;
//使Shaka.fn.init() 构造的对象拥有和 Shaka 一样的prototype属性和方法
//然后:
return new Shaka.fn.init(age); // 这时构造的对象,才能拥有和Shaka一样的prototype属性和方法

作者: carkey712   发布时间: 2010-06-04

因为 return new Shaka.fn.init(age);
所以 init: function(age) {
              this.age = age;
              return this;
       },

这里 return this, 返回的是 Shaka.fn.init 对象,而不是Shaka,
所以必须让 Shaka.fn.init 的prototype 继承 Shaka的prototype

作者: carkey712   发布时间: 2010-06-04

多谢楼上 明白了

作者: hotcrab2008   发布时间: 2010-06-04

相关阅读 更多