问一个JS的基础问题

chou_kai 2013-08-24 01:19:00
我要给Number对象加一个add方法
为什么我非得这么写
Number.prototype.add=function(){//....}

而不能这么写
Number.add = function(){//...}
...全文
314 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaomeimei_2011 2013-08-26
  • 打赏
  • 举报
回复
Number是一个对象,对象想要创建方法,通过prototype来返回对象类型原型的引用,它可以向其原型中动态添加功能(属性和方法); 所以如果想给Number添加一个方法,就需要用这种 方式: Number.prototype.add = function(){};
来自地狱 2013-08-26
  • 打赏
  • 举报
回复
wangyinshu 2013-08-26
  • 打赏
  • 举报
回复
如果按照第二种写法:
Number.add=function(){//....}
每次实例化Number的对象都要构造一次add函数,比较影响性能。函数不需要改变,所以Number实力都共用一个方法就好,所以写成
Number.prototype.add=function(){//....}
总之:效率问题
阿鱼 2013-08-25
  • 打赏
  • 举报
回复
基础~楼主可以仔细读一些关于“js原型链 面向对象”的一些资料。 赞成8楼的解释: 举例来说:

function Foo(){...};//此为构造函数

Foo.method1=function(){...}
//此为构造函数的方法即:静态方法,因为构造函数也是一个对象,所以静态方法是作为构造函数的一个属性而存在的。
//静态方法的调用:Foo.method()

Foo.prototype.method2=function(){...}
//此为对象方法,构造函数的prototype属性值是一个对象,prototype对象的所有属性是被实例化对象所共享的,因此对象方法method2作为prototype对象的一个属性是被所有实例化Foo后的每个对象所共享的。
//对象方法的调用:
var obj=new Foo();//首先实例化对象
obj.method2();//然后调用


静态方法是指挂靠在构造函数上的方法。 对象方法,是指在构造函数的原型中定义的,每个实例化对象都有的方法。
E维前端 2013-08-25
  • 打赏
  • 举报
回复
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...
ftiger 2013-08-24
  • 打赏
  • 举报
回复
Number 在javascript里面又是一个类又是一个对象. 要对所有的类成员生效,就要加在原型也就是prototype里 直接在Number 下面加只对Number 这个对象生效,不会继承到类里面,可以视为静态方法。
jackson__qi 2013-08-24
  • 打赏
  • 举报
回复
Number.prototype.add=function(){//....} 为函数Number的原型属性添加一个方法add,那么Number对象的所有实例也都有了一个方法add. Number.add = function(){//...}这样写则不会有上面的效果。
zhjdg 2013-08-24
  • 打赏
  • 举报
回复
爱怎么写就怎么写? 关键的是this 是谁。。。。。
chou_kai 2013-08-24
  • 打赏
  • 举报
回复
引用 3 楼 xiaofanku 的回复:
javascript的对象体系就是以原型链的方式设计的
你好!能不能讲得详细点,假设不是原生对象,我是可以这么加的,他这么设计的目的是什么呢。
街头小贩 2013-08-24
  • 打赏
  • 举报
回复
javascript的对象体系就是以原型链的方式设计的
bamboo2000 2013-08-24
  • 打赏
  • 举报
回复
语法问题,必须那么写
默默不得鱼 2013-08-24
  • 打赏
  • 举报
回复
可以理解成类的静态方法与对象实例的方法

87,992

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧