secrets of the javascript Ninja (Function Prototypes)(javascript忍者的秘密)
来源:互联网 发布:陶瓷的制作知乎 编辑:程序博客网 时间:2024/05/16 14:07
函数原型有很多用途,比如可以用来向一个函数实例上添加一些属性,但是它的一个最主要用途是使JavaScript能够以面向对象的方式编程。
实例化和原型(Instantiation 和 prototypes)
所有函数默认的都会有一个含有空对象的prototype属性,它的这个特性只有在实例化后才会有用,为了能够理解它的这种特性是多么的重要,需要知道一个重要的原则:函数具有双重功能,它可以作为一个平常的函数,也可以作为一个类。
- 我们可以通过下面一个小例子来看看如何使用prototype属性向一个函数上添加一个功能
- 从上面的这个例子,我们可以发现以下两个问题:
1.为了产生一个函数的实例对象必须使用new操作符调用该函数。
2.swingSword变成了Ninja的实例ninja2的一个属性。
对于函数Ninja来说,由于使用new操作符调用它,我们也可以认为他是一个构造函数。这就意味着,它使用new操作符调用函数的时候,该函数中this所指向的上下文就是对象自身的实例(即和prototype相同),这段话不是太好理解,来让我们看一个例子:
从上面的例子我们可以发现实例对象调用它的同名方法的顺序:
1.绑定在prototype上的属性。
2.绑定在构造函数内的属性。
另外一个需要了解的是绑定在prototype上的属性,他可以被更新和改变,即使一个对象被实例化后:如下
对象类型
还是以例子说话:
从上面的例子中,我们可以看到:
1.所有的示例对象如果使用typeof检测都是object类型
2.instanceof 实例对象是由那个函数生成的。
3.任何实例都有个constructor属性,用来引用生成该实例对象的构造函数。
为了证明第三个观点,下面来看一个简单的例子:
继承与prototype链
在这里我们还可以看到instanceof的一个重要特性:
有很多方法从函数的prototype属性上复制功能(方法和函数),但是只有一种情况能够形成prototype链。即:SubFunction.prototype = new SuperFunction();.
HTML prototypes
在Internet Explorer 8, Firefox, Safari, 和 Opera这些浏览器中这些可以使用prototype扩展dom元素:来看看一个简短的例子:
- secrets of the javascript Ninja (Function Prototypes)(javascript忍者的秘密)
- secrets of the javascript Ninja(Function Type)(javascript忍者的秘密)
- secrets of the javascript Ninja( javascript Timer)(javascript忍者的秘密)
- secrets of the javascript Ninja( with(){} 的用法)(javascript忍者的秘密)
- 翻译 Secrets of the JavaScript Ninja - 1.进入忍者的世界(1.Enter the ninja)
- 翻译 Secrets of the JavaScript Ninja - 6.原型与面向对象(6.Object-orientation with prototypes)
- 翻译 Secrets of the JavaScript Ninja (JavaScript忍者禁术)
- 翻译 Secrets of the JavaScript Ninja - 2.测试和debug(2.Testing and debugging)
- 翻译 Secrets of the JavaScript Ninja - 3.函数是根基(3.Functions are fundamental)
- 翻译 Secrets of the JavaScript Ninja - 4.挥舞函数(4.Wielding functions)
- 翻译 Secrets of the JavaScript Ninja - 5.闭包 (5.Closing in on closures)
- Secret of the JavaScript Ninja 学习笔记 - 1
- Secret of the JavaScript Ninja 学习笔记 - 2
- Secret of the JavaScript Ninja 学习笔记 - 3
- Secret of the JavaScript Ninja 学习笔记 - 4
- Secret of the JavaScript Ninja 学习笔记 - 5
- Secret of the JavaScript Ninja 学习笔记 - 6
- Secret of the JavaScript Ninja 学习笔记 - 7
- 巴菲特理财法:“三要三不要”
- linux CVS配置
- MIPS 每秒百万条指令数
- 用VS做汇编开发环境的方法
- 亿万富翁这样炼成:巴菲特理财习惯揭秘
- secrets of the javascript Ninja (Function Prototypes)(javascript忍者的秘密)
- 足球联赛管理系统所有数据库对象
- 巴菲特名言语录
- DataGridView 只能输入整数解决方案
- 巴菲特价值投资法则
- SQL语法大全
- stat,fstat以及lstat函数
- 常见数据库分页SQL语句
- Head First C# 中文版 图文皆译 第七章 接口和抽象类 page275