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

请教我对《javascript语言精粹》一书中“给类型增加方法”的困惑?

0 投票

以下代码摘自《javascript语言精粹》4.7节(P32),为了方便测试我略微修改了下代码:

<!DOCTYPE HTML>
<html lang="en-US">
<script type="text/javascript">
window.onload = function () {
    Function.prototype.method = function (name,func) {
        this.prototype[name] = func;
        return this;
     };
    Number.method('integer', function () {
        return Math[this < 0 ? 'ceil' : 'floor'](this);
    });

    var simple = document.getElementById('simple');
    var outputInt = (-10/3).integer();
    simple.innerHTML = outputInt;
}
</script>
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>一些无关紧要的内容
<div id="simple">这里应该是一个测试数字</div>
</body>
</html>

我的困惑:
Number.method()这个方法是在什么地方定义的呢?或者说可不可以这么理解:Number下没有method()方法,于是Number.method()实际上查找的是Number.prototype.method(),如果是第二个假设的话,那么Number.prototype.method()又是在什么地方定义的呢?
第一个函数定义的可是Function.prototype.method()的呀?我把第一个函数换成Object.prototype.method()也是好使的,但是换成其他的关键字就不好使了,例如Number.prototype.method()就不好使了,这是为什么呢?难道说这里的Object包含Function?如果真的是包括的话,那它和typeof的object值不包含 function值,如何区分?
我知道ECMAScript 有 5 种原始类型(primitive type),即 Undefined、Null、Boolean、Number 和 String,那么Function.prototype.method中的Function是什么?应该怎么称呼?我需要搜索什么关键字才能学习到相关的知识点?

用户头像 提问 2012年 12月1日 @ Lee Sin 上等兵 (347 威望)
分享到:

1个回答

0 投票

我的理解:
是查找的Function.prototype.method,Number实际上也是个function,所以会从原型查找到。
Function也是从Object继承来的,所以改Object.prototype会影响到Function。
严格来说function类型是object类型的一种,typeof之所以对function做了区分,是因为js中function是第一型的,可以当做参数传递等。
至于5种原始类型,不包括对象类型的Function,是正常的

可以参考周爱民的几篇文章:
http://blog.csdn.net/aimingoo/article...
http://blog.csdn.net/aimingoo/article...

另外关于Function和Object的关系,补充两个
http://www.planabc.net/2010/05/06/int...
http://www.cnblogs.com/objectorl/arch...

用户头像 回复 2012年 12月1日 @ Blitzcrank 上等兵 (358 威望)
提一个问题:

相关问题

0 投票
1 回复 32 阅读
0 投票
1 回复 44 阅读
0 投票
1 回复 28 阅读

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

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