作者:轩脉刃
1 原型法设计模式
在.Net中可以使用clone()来实现原型法
原型法的主要思想是,现在有1个类A,我想要创建一个类B,这个类是以A为原型的,并且能进行扩展。我们称B的原型为A。
2 javascript的方法可以分为三类:
a 类方法
b 对象方法
c 原型方法
例子:
- functionPeople(name)
- {
- this.name=name;
- //对象方法
- this.Introduce=function(){
- alert("My name is "+this.name);
- }
- }
- //类方法
- People.Run=function(){
- alert("I can run");
- }
- //原型方法
- People.prototype.IntroduceChinese=function(){
- alert("我的名字是"+this.name);
- }
- //测试
- var p1=newPeople("Windking");
- p1.Introduce();
- People.Run();
- p1.IntroduceChinese();
3 obj1.func.call(obj)方法
意思是将obj看成obj1,调用func方法
好了,下面一个一个问题解决:
prototype是什么含义?
javascript中的每个对象都有prototype属性,Javascript中对象的prototype属性的解释是:返回对象类型原型的引用。
A.prototype = new B();
理解prototype不应把它和继承混淆。A的prototype为B的一个实例,可以理解A将B中的方法和属性全部克隆了一遍。A能使用B的方法和属性。这里强调的是克隆而不是继承。可以出现这种情况:A的prototype是B的实例,同时B的prototype也是A的实例。
先看一个实验的例子:
- function baseClass()
- {
- this.showMsg =function()
- {
- alert("baseClass::showMsg");
- }
- }
- function extendClass()
- {
- } extendClass.prototype =new baseClass();
- var instance =new extendClass();
- instance.showMsg();// 显示baseClass::showMsg
我们首先定义了baseClass类,然后我们要定义extentClass,但是我们打算以baseClass的一个实例为原型,来克隆的extendClass也同时包含showMsg这个对象方法。
extendClass.prototype = new baseClass()就可以阅读为:extendClass是以baseClass的一个实例为原型克隆创建的。
那么就会有一个问题,如果extendClass中本身包含有一个与baseClass的方法同名的方法会怎么样?
下面是扩展实验2:
- function baseClass()
- {
- this.showMsg =function()
- {
- alert("baseClass::showMsg");
- }
- }
- function extendClass()
- {
- this.showMsg =function()
- {
- alert("extendClass::showMsg");
- }
- }
- extendClass.prototype =new baseClass();
- var instance =new extendClass();
- instance.showMsg();//显示extendClass::showMsg
实验证明:函数运行时会先去本体的函数中去找,如果找到则运行,找不到则去prototype中寻找函数。或者可以理解为prototype不会克隆同名函数。
那么又会有一个新的问题:
如果我想使用extendClass的一个实例instance调用baseClass的对象方法showMsg怎么办?
答案是可以使用call:
- extendClass.prototype =new baseClass();
- var instance =new extendClass();
- var baseinstance =new baseClass();
- baseinstance.showMsg.call(instance);//显示baseClass::showMsg
这里的baseinstance.showMsg.call(instance);阅读为“将instance当做baseinstance来调用,调用它的对象方法showMsg”
好了,这里可能有人会问,为什么不用baseClass.showMsg.call(instance);
这就是对象方法和类方法的区别,我们想调用的是baseClass的对象方法
最后,下面这个代码如果理解清晰,那么这篇文章说的就已经理解了:
- <script type="text/javascript">
- function baseClass()
- {
- this.showMsg =function()
- {
- alert("baseClass::showMsg");
- }
- this.baseShowMsg =function()
- {
- alert("baseClass::baseShowMsg");
- }
- }
- baseClass.showMsg =function()
- {
- alert("baseClass::showMsg static");
- }
- function extendClass()
- {
- this.showMsg =function()
- {
- alert("extendClass::showMsg");
- }
- }
- extendClass.showMsg =function()
- {
- alert("extendClass::showMsg static")
- }
- extendClass.prototype =new baseClass();
- var instance =new extendClass();
- instance.showMsg();//显示extendClass::showMsg
- instance.baseShowMsg();//显示baseClass::baseShowMsg
- instance.showMsg();//显示extendClass::showMsg
- baseClass.showMsg.call(instance);//显示baseClass::showMsg static
- var baseinstance =new baseClass();
- baseinstance.showMsg.call(instance);//显示baseClass::showMsg
- </script>
相关推荐
### Prototype详解:深入理解JavaScript库的核心功能与Ajax应用 #### 一、Prototype简介与核心功能解析 ##### 1. Prototype是什么? Prototype是一个由Sam Stephenson创建的JavaScript库,旨在简化和标准化...
### JS:prototype用法详解 #### 一、概念解析与基本使用 `prototype`是JavaScript中一个非常重要的概念,尤其自IE4及其后续版本引入以来,成为开发人员扩展内置对象功能的强大工具。`prototype`主要服务于面向...
prototype原型是javascript中特别重要的概念,属于必须要掌握,如果没有良好的掌握的话,进一步用好或者学好js基本是不可能的实现的事情,并且此概念稍有难度,可能对于初次接触的朋友来说有点困难,下面就通过代码...
它在Web开发中扮演着重要的角色,尤其在AJAX(异步JavaScript和XML)应用中,Prototype.js 提供了丰富的功能和工具,使得开发者能更高效地编写JavaScript代码。 ### 一、Prototype.js核心特性 1. **DOM操作**:...
JavaScript中的`prototype`属性是面向对象编程的关键特性之一,它关联了函数(特别是构造函数)与实例之间的继承关系。每个函数都有一个`prototype`属性,这个属性是一个对象,包含了所有实例共享的方法和属性。当...
**JavaScript原型(Prototype)库详解** JavaScript是一种动态类型的编程语言,其灵活性和强大的对象操作能力使其在Web开发中占据重要地位。"Prototype.js"是一个针对JavaScript的开源库,旨在增强和扩展JavaScript的...
**标题:** prototype.js简介 **描述:** prototype.js 是一个JavaScript库,...然而,随着ES6及后续版本的推出,许多prototype.js的功能已被原生JavaScript支持,因此在现代开发中,使用这些新的语言特性可能更为合适。
**Prototype.js 1.6 知识点详解** Prototype.js 是一个开源的JavaScript库,它扩展了JavaScript语言,为开发者提供了许多便利的功能,特别是在对象操作、DOM操作和事件处理方面。1.6版本是该库的一个重要里程碑,...
Prototype JavaScript 框架是早期Web开发中广泛使用的库,特别是在AJAX应用中。这个框架由Sam Stephenson创建...而`prototype-1.6.0.3.js`文件则是实际的库文件,包含所有Prototype的功能实现,可以直接在项目中引用。
《Prototype.js 1.6:JavaScript 动态对象增强库的深度解析》 Prototype.js 是一个广泛使用的 JavaScript 库,它为浏览器环境提供了许多实用的功能,尤其是在对象操作和事件处理方面。1.6 版本是该库的一个重要里程...
JavaScript中的`prototype`是面向对象编程的一个核心概念,它允许我们为对象定义共享的方法和属性。在JavaScript中,每一个函数都有一个`prototype`属性,这个属性是一个对象,当我们创建一个新对象实例时,该实例会...
### JavaScript中的Prototype用法详解 #### 一、引言 在JavaScript中,`prototype`是一个非常重要的概念,尤其是在面向对象编程(OOP)方面。通过理解并掌握`prototype`的使用,开发者可以更加灵活地扩展对象的功能,...
**prototype.js 文件详解** 在JavaScript中,`prototype`是一个核心概念,它关乎对象的继承机制。`prototype.js`是一个开源库,旨在扩展JavaScript的基础功能,尤其是面向对象编程的支持。这个库由Sam Stephenson...
主要给大家介绍了关于Javascript中prototype与__proto__的关系的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
在JavaScript中,`prototype`是实现面向对象编程的关键特性,它允许我们为类(或称为构造函数)添加方法。在本文中,我们将深入探讨如何利用`prototype`为类添加方法,以及这种方法背后的原理。 首先,我们需要理解...
Prototype框架是一种广泛使用的JavaScript库,它为JavaScript编程提供了一系列实用的功能,增强了JavaScript的面向对象特性。这个框架的主要目标是简化DOM操作,提供更强大的函数工具,并优化JavaScript代码的可读性...
JavaScript中的`prototype`、`__proto__`和`constructor`是理解JavaScript面向对象编程的关键概念。这篇文章通过图解的方式深入浅出地解析了这三个概念之间的关系。 首先,`__proto__`属性是对象独有的,它指向对象...
JavaScript中的原型(prototype)机制是实现继承的一种核心方式。由于JavaScript是一种基于原型的面向对象语言,它不支持传统的类(class)概念,因此其继承机制显得与众不同。在JavaScript中,对象可以直接从另一个...
描述中提到的"前一段找了有关prototype和jquery一些相关资料,包括prototype.chm文档,及prototype与jquery详解"表明压缩包中可能包含了一个名为"prototype.chm"的帮助文件,这通常是一个Windows平台下的HTML帮助文档...