`
hulianwang2014
  • 浏览: 691938 次
文章分类
社区版块
存档分类
最新评论
  • bcworld: 排版成这样,一点看的欲望都没有了
    jfinal

理解javascript的函数prototype

 
阅读更多
1. 在Javascript中,函数protoytpes是一个很方便的方式来为一个函数的实例快速地绑定属性。它有多种用途,其中,最主要的目的是为了实现OO(Object-Oriented programming).

所有的function都有prototype属性,默认情况下,它包含空的对象。prototype只有在functions被实例化后才能发挥出它的作用。请记住:Functions有双重作用。函数不仅仅作为一般常规的函数功能,也可以在它能够被实例化时作为类。

function Service(){}
Service.prototype.ok = function(){
return true;
};
var service1 = Service();
assert( service === undefined, "Is undefined, not an instance of Service." );
var service2 = new Service(); 
assert( service2.ok(), "Method exists and is callable." );

2. 对象属性constructor. 这个属性存在于所有的对象,提供了对创建的原始函数的反引用。可以使用它来认证是否是原始实例对象。这也意味着,当一个带有new操作的函数被调用时,它的上下文context与它本身的实例是相等的。
事实上,一个函数context能够被重新定义一旦它被调用.JavaScript 提供了两个方法来调用函数,它们是call 和 apply。当它们被调用时,它的context和参数将被作为它的实例来看待。

var job1 = new Job();
var job2 = new ninja.constructor();
assert( job2 instanceof Job, "Still a ninja object." );

call 和apply 的列子:
function add(a, b){
return a + b;
}
assert( add.call(this, 1, 2) == 3,
".call() takes individual arguments" );
assert( add.apply(this, [1, 2]) == 3,
".apply() takes an array of arguments" );
简单地说,call是单个地传入参数而apply()则是以数组类型传入参数。


分享到:
评论

相关推荐

    整理的JavaScript函数

    整理的10大JavaScript函数,prototype的$函数,隐藏、显示元素函数,通过className获取DOM元素函数

    [hook.js]通用Javascript函数钩子

    realFunc[String|must]:用于保存原始函数的函数名称,用于unHook; hookFunc[Function|must]:替换的hook函数; context[Object|opt]:目标函数所在对象,用于hook非window对象下的函数,如String.protype.slice,...

    JavaScript prototype属性详解

    之前写的一篇JavaScript 命名空间博客提到过JavaScript的函数作用域,在函数内定义的变量和函数如果不对外提供接口,那么外部将无法访问到,也就是变为私有变量和私有函数。 function Obj(){ var a=0; //私有变量

    javascript prototype原型详解(比较基础)

    javascript的prototype原型简单介绍: prototype原型是javascript中特别重要的概念,属于必须要掌握,如果没有良好的掌握的话,进一步用好或者学好js基本是不可能的实现的事情,并且此概念稍有难度,可能对于初次接触...

    Prototype_1.6 JavaScript代码和中文帮助手册

    prototype.js 是Sam Stephenson写的一个Javascript的小框架(实际上是一个函数库),该框架首页是:http://prototype.conio.net/  prototype.js是一个非常优雅的javascript基础类库,对javascript做了大量的扩展,...

    javascript中的prototype属性使用说明(函数功能扩展)

    在Javascript中,一切都是对象,字符串是对象,数组是对象,变量是对象,函数也是对象,所以才会允许[‘a’,’b’,’c’].push(‘d’);这样的操作存在。类本身也是一个对象,也可以定义属性和方法: 代码如下: ...

    prototype.js手册

    prototype.js是什么? 万一你没有使用过... 相关文章 Advanced JavaScript guide. 一些实用的函数 这个类库带有很多预定义的对象和实用函数,这些东东的目的显然是把你从一些重复的打字中解放出来 。

    String.prototype实现的一些javascript函数介绍

    主要是对String.prototype实现的一些javascript函数进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助

    JavaScript使用Prototype实现面向对象的方法

    本文实例讲述了JavaScript使用Prototype实现面向对象的方法。分享给大家供大家参考。具体分析如下: prototype 是 Function 对象的一个属性,这个属性指向另一个对象。 这个对象的所有属性和方法,都会被构造函数的...

    JavaScript使用prototype属性实现继承操作示例

    本文实例讲述了JavaScript使用prototype属性实现继承操作。分享给大家供大家参考,具体如下: JS并没有显式的继承语法,在JS中所有的对象都是Object的子类实现, 因而对象之间是平等关系. 尽管如此我们可以通过特殊的...

    JavaScript类和继承 prototype属性

    prototype属性本质上还是一个JavaScript对象。 并且每个函数都有一个默认的prototype属性。 如果这个函数被用在创建自定义对象的场景中,我们称这个函数为构造函数。 比如下面一个简单的场景: 代码如下: // 构造...

    跟我学习javascript的prototype原型和原型链

    用过JavaScript的同学们肯定都对prototype如雷贯耳,但是这究竟是个什么东西却让初学者莫衷一是,只知道函数都会有一个prototype属性,可以为其添加函数供实例访问,其它的就不清楚了,最近看了一些 JavaScript高级...

    JavaScript使用prototype原型实现的封装继承多态示例

    主要介绍了JavaScript使用prototype原型实现的封装继承多态,涉及javascript prototype与面向对象程序设计相关操作技巧,需要的朋友可以参考下

    javascript prototype 原型链

    JavaScript中的prototype概念恰如其分地反映了这个词的内含,我们不能将其理解为C++的prototype那种预先声明的概念。 JavaScript 的所有function类型的对象都有一个prototype属性。这个prototype属性本身又是一个...

    深入理解JavaScript

    但是⼗多年前,我们编写 JavaScript 程序时,都是像 C 语⾔那样使⽤函数来组织我们的程序的,只有在论坛的某个 落中,有少数的⾼⼿会偶尔提到你可以通过修改某个对象的prototype来让你的函数达到更 层次的复⽤,直到...

    Javascript Function.prototype.bind详细分析

    Function.prototype.bind分析 bind()方法会创建一个新的函数,成为绑定函数。当调用这个绑定函数时,绑定函数会以创建它时传入的第一个参数作为this,传入bind()方法的第二个以及以后的参数加上绑定函数运行时本身的...

    javascript-prototype:Javascript 原型

    在浏览器上使用文件运行单元测试以使用 javascript 脚本函数。 这是最佳做法。 发展 Javascript 语言是非常宽容的,但是如果您使用像这样的基本文档和像 Jasmine 这样的单元/功能测试,那么每个人都可以轻松阅读您的...

    JavaScript函数的特性与应用实践深入详解

    本文实例讲述了JavaScript函数的特性与应用实践。分享给大家供大家参考,具体如下: 函数用于指定对象的行为。所谓的编程,就是将一组需求分解为一组函数和数据结构的技能。 1 函数对象 JavaScript 函数就是对象。...

    深入浅析JavaScript中prototype和proto的关系

    prototype,每一个函数对象都有一个显示的prototype属性,它代表了对象的原型(Function.prototype函数对象是个例外,没有prototype属性)。 __proto__:每个对象都有一个名为__proto__的内部隐藏属性,指向于它所对应的...

    Javascript的构造函数和constructor属性

    真正的原因是:一个对象的constructor是它的构造函数的prototype.constructor,而每一个函数都有一个prototype,默认情况下,这个prototype有一个constructor属性,指向的是它自己。 我觉得Javascript的设计本意是让...

Global site tag (gtag.js) - Google Analytics