function 函数类型之prototype

prototype 和 length

函数的属性和方法

ECMAScript 中函数是对象,因此也有属性和方法。每个函数都有两个属性,lengthprototype 其中length 表示希望接收的命名函数参数的个数。

length 属性

下面的代码就是说的 length 属性,比较简单,没啥好说的。

function box(a,b,c){
return d=(a+b)/c;
}
box(1,2,3);     
document.write(d+"<br/>");
document.write(box.length+"<br/>");  

prototype 属性

然后我们看看 prototype 属性。
对于 prototype 的理解下面的例子觉得很不错。
提问:对于下面的代码有

function a(){this.name="你好";this.age="25";}
a.prototype.b=function (){alert("hello world")};  

上面代码的意思是不是说:在a函数的对象原型(也就是对象Object)上添加一个b()方法呢,这样子a函数就可以继承了??也就是说可以用这样的一段代码代替

a.b=function(){alert("hello world")}

回答:这样语法是没有错误的。a.b = function(){...}是可以的,但是这样的话,如果有一百个a”对象“,那么你的100个a上面就有100个b方法。可是,你如果在原型上设置b方法,那么这100个a都只共享着一个b方法,这样一来可以节省内存,二来更具有”面向对象”的潜质。
而 prototype 有两个方法, applycall
二者的区别: While the syntax of this function is almost identical to that of call(), the fundamental difference is that call() accepts an argument list, while apply() accepts a single array of arguments.
看看下面的例子:

function cat(){
}
cat.prototype={
food:"fish",
say: function(){
alert("I love "+this.food);
}
}    
var blackCat = new cat;
blackCat.say();

但是如果我们有一个对象 Dog = {this.food="bone"},我们不想对它重新定义 say 方法,那么我们可以通过 call 或 apply 用 blackCat 的 say 方法:

function cat(){
}
cat.prototype={
food:"fish",
say: function(){
document.write("I love "+this.food+"<br/>"+"<br/>");
}
}    
var blackCat = new cat;
blackCat.say();
var yellowCat= new cat;
yellowCat.say();     
 function Dog(){
    this.food="bone";
 }
var dog = new Dog();
blackCat.say.call(dog);

所以,可以看出 callapply 是为了动态改变 this 而出现的,当一个 object 没有某个方法,但是其他的有,我们可以借助 call 或 apply 用其它对象的方法来操作。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 12,386评论 2 17
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,620评论 0 4
  • 生活节奏越来越快,身边的抑郁症患者越来越多。在大多数人的眼里认为抑郁症只是一些人无病呻吟的小把戏,殊不知抑郁症患...
    琴茶阅读 3,808评论 0 0
  • 图片发自简书App “我建议你还是去打仗别去爱了,因为在战争里不是死便是活,但是在爱里,你既死不了也活不好” ...
    守望著你的那個我阅读 2,726评论 0 0
  • 家再小也要养花,绿叶丛生,花开富贵。绿色寓意希望,是新生,是生命之顽强;花是你辛勤孕育的果实,百花争艳,美不胜收。...
    零星晓语阅读 4,026评论 4 1

友情链接更多精彩内容