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);
};
分享到:
相关推荐
js中prototype1
JavaScript中prototype的使用
js中prototype用法详细介绍.docx
关于JS中prototype的理解.docx
prototype的JS文件prototype的JS文件prototype的JS文件prototype的JS文件
在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个类B,这个类是以A为原型的,并且能进行扩展。我们称B的原型为A。 2 javascript的方法可以分为三类: a 类方法 b 对象方法 ...
Prototype(原型)是js中很重要的一部分,对象的创建和继承的模拟都要通过原型去实现.通过本文档,能让你对javascript中的原型有一个初步的了解.
本文实例讲述了JS中prototype的用法。分享给大家供大家参考。具体分析如下: JS中的phototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 ...
JS:prototype用法
prototype-1.6.0.3.js prototype1.4中文手册(chm) prototype1.5中文手册(chm) prototype1.6英文手册(chm)
详细介绍了js中prototype用法及实例,有需要的朋友可以参考一下
开源JS包Prototype使用指南开源JS包Prototype使用指南开源JS包Prototype使用指南开源JS包Prototype使用指南开源JS包Prototype使用指南
JavaScript_Prototype(源代码+中文手册)
轻松建立有高度互动的web2.0特性的富客户端页面
主要给大家介绍了关于Javascript中prototype与__proto__的关系的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
prototype js脚本库prototype js脚本库prototype js脚本库prototype js脚本库
js框架prototype 1.6文档/1.6.0.3 js 中文参考手册 天涯浪子 Prototype 1.6.0.3 中文参考手册
prototype prototype 1.6中文手册 prototype 1.6中文手册chm 非常详尽,爱不释手
prototype.js 1.6中文手册、prototype.js 1.6英文手册、
压缩包内包含的文件如下: 1.手册与教程: ...CSS 2.0样式表中文手册(推荐); ... javascript_Refer_CN.CHM:javascript中文参考手册(推荐); JavaScript_Refer_CN.rar:javascript中文参考手册(HTML版,...Prototype 1.4.0源码.js.