免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: hbmhalley
打印 上一主题 下一主题

[其他] 问个 javascript 问题 [复制链接]

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
11 [报告]
发表于 2012-09-18 10:43 |只看该作者
do you means that:

  1. <html>
  2. <body>
  3. <script type="text/javascript">
  4. function class01(){
  5.         this.type="01";
  6.         this.op=function (){
  7.                 alert(this.type);
  8.         }
  9. }

  10. function class02(){
  11.         this.type="02";
  12.         this.op=function (){
  13.                 alert(this.type);
  14.         }
  15. }

  16. var obj=new class01();
  17. obj.op();
  18. var obj=new class02();
  19. obj.op();
  20. </script>
  21. </body>
  22. </html>
复制代码

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
12 [报告]
发表于 2012-09-18 10:47 |只看该作者
or you just need this:

  1. var fun=function (argv){
  2.         alert(argv);
  3. }

  4. fun("str");
复制代码

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
13 [报告]
发表于 2012-09-18 14:32 |只看该作者
要是在使用方式上允许一个间接层就好办了。。。

比如继承的properties是直接访问,但不直接调用:

  1. function Type () {}
  2. Type.prototype = {a : 1 , b : 2}
  3. var p = new Type;
  4. var q = new Type;
  5. p.f = function(x) { return x+1; }
  6. q.f = function(x) { return x-1; }
复制代码
p.a,  p.b, q.a, q.b 是可以感知到 Type.prototype 的改动的 —— Type.prototype.a = 12; p.a === 12; ——这是你想要的吧?


又或者直接调用,但不直接访问:

  1. var p = function(x) { return x+1;}
  2. var q = function(x) { return x-1; }
  3. var properties = { a : 1 , b : 2 }
  4. p.ps = properties
  5. q.ps = properties
复制代码
如果又要直接调用,且直接访问。。。  不好办啊。。。

1. 让object可以被call
有些object是可以的,但貌似不将这种能力公开给程序员。。。  而且这种特性以后也要删除。。。

  1. var r = new Type;
  2. r.call = function(x) { return x+1; }
  3. r(12) // 如果r(x) 是 r.call(window, 12) 的语法糖什么的就好了, 可惜不是
复制代码
2. 让function可以继承属性
官方的继承属性的方式, new F(args...) 创建出的object继承F.prototype, Object.create(prototype) 都是针对object的。
其实, constructor function可以return一个东西, 而不是隐式返回。
我试过:

  1. function Type(f) { return function() { return f.apply(this, arguments) } }
  2. var p = new Type(function(x) { x+1; }
复制代码
但如果使用return, new Type(...) 得到确实是return的东西, 但继承Type.prototype的依然constructor调用时的this。。。
因为return了一个function, 那个object继承了Type.prototype, 但立马被丢弃了。。。


3. 被function继承的prototype
就是Function.prototype了。。。
Function.prototype.a = 1
Function.prototype.b = 2
var f = function(x) { ... }

这改动的范围也太大了。。。


这样应该是可以的:
var properties = inherited(Function.prototype, { a : 1, b : 2} ) ; // 我忘记这函数怎么实现了。。。
var old = Function.prototype
Function.prototype = properties
var f = function(x) { ... }
Function.prototype = old
...
Function.prototype = properties
var g = function(x) { ... }
Function.prototype = old


甚至还想过:
(function() { var Function = { prototype : { a : 1 , b : 2} }; return function(x) { return x+1; } })()


4. 直接修改继承链。。。
var f = function(x) { ... }
f.__proto__ = Type.prototype

但至少IE6不支持__proto__的。。。

总之,木有一个让人各方面都感到满意的方法。。。

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
14 [报告]
发表于 2012-09-18 14:35 |只看该作者
通常, 我们认为看懂犀牛书之后即可, 实际上那些知识足够我们写个淘宝.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP