我要给Number对象加一个add方法
为什么我非得这么写Number.prototype.add=function(){//....}
而不能这么写Number.add = function(){//...}

解决方案 »

  1.   

    javascript的对象体系就是以原型链的方式设计的
      

  2.   

    http://www.ruanyifeng.com/blog/2011/06/designing_ideas_of_inheritance_mechanism_in_javascript.html
      

  3.   

    爱怎么写就怎么写?
    关键的是this 是谁。。
      

  4.   

    Number.prototype.add=function(){//....}
    为函数Number的原型属性添加一个方法add,那么Number对象的所有实例也都有了一个方法add.
    Number.add = function(){//...}这样写则不会有上面的效果。
      

  5.   

    Number 在javascript里面又是一个类又是一个对象.
    要对所有的类成员生效,就要加在原型也就是prototype里
    直接在Number 下面加只对Number 这个对象生效,不会继承到类里面,可以视为静态方法。
      

  6.   

    Number是一个构造函数,换言之是一个类的标志,并不是实例,任何一个对象对会与另外一个一个对象有关联(某些特殊对象除外),这个关联以prototype属性为关键,new关键字创建实例对象会继承构造函数的原型对象的属性,而构造函数this.x所设置的属性则会成为实例对象的“类方法(java)”,但是Number.add则会成为Number构造函数对象的属性,因为javascript是面向对象的,任何东西他都可以看作是对象,尽管事实上不如此(原始类型的属性访问实际上会创建临时对象再操作),在你这个情况中,Number.add实际上是给Number构造函数绑定了属性add,你要这样去调用这个add方法Number.add=function(){
        console.log("add");
    };
    var num=1;
    num.constructor.add();这是不标准的,也不方便,而且add内部上下文无法引用num...
      

  7.   

    基础~楼主可以仔细读一些关于“js原型链 面向对象”的一些资料。
    赞成8楼的解释:举例来说:function Foo(){...};//此为构造函数Foo.method1=function(){...}
    //此为构造函数的方法即:静态方法,因为构造函数也是一个对象,所以静态方法是作为构造函数的一个属性而存在的。
    //静态方法的调用:Foo.method()Foo.prototype.method2=function(){...}
    //此为对象方法,构造函数的prototype属性值是一个对象,prototype对象的所有属性是被实例化对象所共享的,因此对象方法method2作为prototype对象的一个属性是被所有实例化Foo后的每个对象所共享的。
    //对象方法的调用:
    var obj=new Foo();//首先实例化对象
    obj.method2();//然后调用静态方法是指挂靠在构造函数上的方法。
    对象方法,是指在构造函数的原型中定义的,每个实例化对象都有的方法。
      

  8.   

    如果按照第二种写法:
    Number.add=function(){//....}
    每次实例化Number的对象都要构造一次add函数,比较影响性能。函数不需要改变,所以Number实力都共用一个方法就好,所以写成Number.prototype.add=function(){//....}总之:效率问题
      

  9.   

    Number是一个对象,对象想要创建方法,通过prototype来返回对象类型原型的引用,它可以向其原型中动态添加功能(属性和方法);
    所以如果想给Number添加一个方法,就需要用这种
    方式:
           Number.prototype.add = function(){};