`
haibin369
  • 浏览: 60230 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Js中的prototype

阅读更多

1.prototype(原型)

      在JavaScript中,我们创建的每一个函数都有一个prototype(原型)属性,这个属性是一个对象,它的用途是保存某些可以被特定类型的所有实例所共享的属性或者方法。也就是说,当我们给某个函数Person的prototype增加属性或方法时,以Person为构造函数生成的所有实例都能访问到该属性或方法:

	<script type="text/javascript">
		//定义Person方法并创建两个Person实例
		function Person(){}
		var person1 = new Person();
		var person2 = new Person();

		//为Person的原型增加name属性和sayName方法
		//即使在实例的创建之后定义,但对实例也是立即可见的
		Person.prototype.name = "Peter";
		Person.prototype.sayName = function(){return this.name;};
		
		//所有实例共享原型上的属性或者方法
		alert(person1.name);		//Peter
		alert(person2.name);		//Peter
		alert(person1.sayName());	//Peter
		alert(person2.sayName());	//Peter
		
		//当实例中有同名的变量或者方法时,prototype的属性或者方法则被隐藏了(并非覆盖)
		person1.name="Billy";
		alert(person1.name);		//Billy
		delete person1.name;
		alert(person1.name);		//Perter
		
		//使用hasOwnProperty()可以判断某个属性是否为自有属性
		alert(person1.hasOwnProperty("name"));//false
		person1.name="Jack";
		alert(person1.hasOwnProperty("name"));//false
	</script>

 

2.原型、构造函数和实例之间的关系

当我们定义一个函数的时候,它的默认的prototype对象便随之产生,这个prototype对象有一个construtor属性指向该函数,而使用该函数创建的所有实例内部都含有一个指针__proto__指向prototype对象(IE8中不能访问该指针):

	<script type="text/javascript">
		function Person(){}
		alert(Person.prototype);					//[object Object]
		
		//prototype的constructor属性指向Person
		alert(Person.prototype.constructor);		//function Person(){}
		alert(Person.prototype.constructor == Person);//true
		
		//每个实例存在一个__proto__指针指向Person.prototype
		//IE中不能访问
		var person = new Person();
		alert(person.__proto__);					//[object Object]
		alert(person.__proto__==Person.prototype);	//true(IE为false)
	</script>
 

3.原型链与继承

一个prototype是一个对象,因此,它必然有一个__proto__指针指向构造函数的prototype对象,同样道理,这个prototype对象又有一个__proto__指针指向构造函数的prototype对象,这样一环接一环直到Object.prototype,这就组成了一条原型链。当我们调用某个实例的属性或者方法的时候,首先从该实例寻找该变量或者方法,若找到则返回;否则寻找__proto__所指向的prototype对象,若还是没找到则继续寻找其__proto__指向的对象,直到找到或者到达原型链的末尾为止。我们可以通过这种查找方式实现继承。

		function SuperType(name)
		{
    		this.name = name;
		}
                   
		SuperType.prototype.sayName = function(){
    		alert(this.name);
		};
                   
		function SubType(name, age)
		{  
    		SuperType.call(this, name);
    		this.age = age;
		}
		
     	SubType.prototype = new SuperType();
                   
		SubType.prototype.sayAge = function()
		{
    		alert(this.age);
		}; 
 

 

 

0
0
分享到:
评论

相关推荐

    关于JS中prototype的理解.docx

    JS 中 prototype 的理解 prototype 是 JavaScript 中的一个重要概念,它是每个构造函数都有的一个属性,即原型。通过 prototype,可以实现继承和扩展对象的功能。prototype 的主要思想是,现在有 1 个类 A,我想要...

    js中prototype1

    在JavaScript中,`prototype`是一个非常重要的概念,它涉及到对象的继承和方法共享。每个函数(在JavaScript中,函数也是一种对象)都有一个`prototype`属性,这个属性指向一个对象,这个对象的用途是为通过该函数...

    JavaScript中prototype的使用

    JavaScript中的`prototype`属性是实现面向对象编程的关键概念之一,尤其在JavaScript中,它用于实现对象的继承。本文将深入探讨`prototype`的含义、作用以及如何使用。 1. **什么是prototype** 在JavaScript中,每...

    javascript类库prototype.js

    Prototype.js 是一个强大的JavaScript类库,它为开发者提供了丰富的功能,使得创建具有高度互动性和Web2.0特性的富客户端页面变得更为简单。这个库的设计理念是扩展JavaScript的基础对象,提供一套统一且易于使用的...

    js中prototype用法详细介绍.docx

    ### JavaScript中的Prototype用法详解 #### 一、引言 在JavaScript中,`prototype`是一个非常重要的概念,尤其是在面向对象编程(OOP)方面。通过理解并掌握`prototype`的使用,开发者可以更加灵活地扩展对象的功能,...

    JS中的prototype

    JavaScript中的`prototype`是语言核心概念之一,它在对象创建、继承和方法共享中起着关键作用。在JavaScript中,每个对象都有一个`prototype`属性,这个属性引用了一个对象,通常用于实现对象间的继承。理解`...

    关于JS中prototype的理解

    JavaScript中的`prototype`属性是理解面向对象编程的关键概念之一。每个构造函数(即函数)都有一个内置的`prototype`属性,这个属性允许我们为对象创建共享的属性和方法,从而实现代码复用和继承。在JavaScript中,...

    prototype_1.7.3.js 最新版本

    《prototype_1.7.3.js:JavaScript框架的里程碑》 在JavaScript的世界里,Prototype库是一个不可或缺的重要组成部分,尤其在Web开发领域,它为开发者提供了强大的功能和便利性。Prototype_1.7.3.js是这个库的一个...

    prototype-1.6.0.3.js+prototype1.4 、1.5中文手册+prototype1.6英文手册

    Prototype是JavaScript库,它为浏览器...而源代码文件`prototype-1.6.0.3.js`则让你可以直接在项目中应用或研究Prototype的实现。对于前端开发者而言,掌握Prototype能提升开发效率,同时增强网页的交互性和动态性。

    JS:prototype用法

    以上示例展示了`prototype`的多样性和实用性,无论是基本功能的添加,已有方法的增强,还是新功能的创造,`prototype`都是JavaScript开发中不可或缺的工具。然而,使用`prototype`也需谨慎,过度使用可能导致代码...

    prototype 1.6中文手册 chm+prototype 1.6.js源码 最新版

    Prototype JavaScript 框架是Web开发中的一个关键工具,它为JavaScript编程提供了许多实用的类库函数和设计模式。这个“Prototype 1.6中文手册 chm+prototype 1.6.js源码 最新版”正是面向希望深入学习和掌握...

    prototype.js中文手册

    它在Web开发中扮演着重要的角色,尤其在AJAX(异步JavaScript和XML)应用中,Prototype.js 提供了丰富的功能和工具,使得开发者能更高效地编写JavaScript代码。 ### 一、Prototype.js核心特性 1. **DOM操作**:...

    prototype.js javaScript插件

    在实际开发中,Prototype.js可以显著提高开发效率,减少代码量,并且由于其良好的兼容性和丰富的功能,成为了许多开发者喜爱的JavaScript插件。下载并使用"prototype.js"文件,即可开始体验这些强大的功能。不过要...

    JS中prototype的用法实例分析

    本文实例讲述了JS中prototype的用法。分享给大家供大家参考。具体分析如下: JS中的phototype是JS中比较难理解的一个部分   本文基于下面几个知识点:   1 原型法设计模式 在.Net中可以使用clone()来实现原型法 ...

    javascript中类和继承(代码示例+prototype.js)

    本文将深入探讨JavaScript中的类和继承,并结合`prototype.js`文件中的示例进行解析。 ### 类的概念与模拟 在JavaScript中,我们通常使用函数来模拟类的行为。一个函数可以看作是一个类的定义,通过`new`关键字来...

    JavaScript_Prototype(源代码+中文手册).rar

    JavaScript Prototype 是一种重要的编程概念,尤其在Web开发中不可或缺。这个压缩包文件“JavaScript_Prototype(源代码+中文手册).rar”包含了关于JavaScript原型的源代码和中文手册,为学习和理解这一主题提供了...

    prototype.js简介

    **标题:** prototype.js简介 **描述:** prototype.js 是一个JavaScript库,...然而,随着ES6及后续版本的推出,许多prototype.js的功能已被原生JavaScript支持,因此在现代开发中,使用这些新的语言特性可能更为合适。

    prototype.js 1.6中文手册、prototype.js 1.6英文手册、

    Prototype.js 1.6中的AJAX(异步JavaScript和XML)功能大大简化了与服务器的通信。`Ajax.Request`和`Ajax.Updater`是核心组件,前者用于发送请求,后者用于更新页面的一部分。它们都支持多种HTTP方法(GET、POST等...

    prototype的JS文件prototype的JS文件

    prototype的JS文件prototype的JS文件prototype的JS文件prototype的JS文件

Global site tag (gtag.js) - Google Analytics