js中原型,原型链的学习与认识

原型的含义:如果构造器有个原型对象A,则由构造函数创建的实例都必然复制于A。原型也是一个对象,原型可以在运行时获得和改变。可以增加属性到原型上或者删除原型上已经存在的属性。原型对象是用来实现继承的。

2.prototype属性,是每个函数自带的属性,(所有类型的构造函数也是函数),prototype是一个包含constructor属性的Object对象,其中constructor属性保存了指向function的一个引用。

3.prototype上的属性可以被所有实例所共享,是因为每个实例都有一个_proto_属性。

4原型链:Js中的所有对象(undefined,null除外)都有一个内置的[[prototype]](_proto_)属性指向它的“父类”的prototype.把这个有_proto_串起来的直到Object.prototype.proto为null的链叫做原型链.

5.function Fun(){

//code

}

这个函数内部会执行下面几个动作:

为该函数添加一个原型(即prototype)属性,为prototype对象额外添加一个constructor属性,并且该属性保存指向函数Fun()的一个引用。

var obj = new Fun();当使用构造函数来创建实例对象的时候,对象的实例内部会自动保存一个指向其构造函数的prototype对象的一个属性_proto_,所以我们每一个对象实例中就可以访问构造函数的prototype所有的属性和方法。

以下面的这个例子来说明,原型的作用,以及原型链的体现:

function CreatePerson(name,age,job){
 this.name = name;
 this.age = age;
 this.job = job;
 }
 CreatePerson.prototype.firstname = "xi";
 CreatePerson.prototype.getName = function() {
 alert(this.name);
 };
 var per1 = new CreatePerson("xixi",22,"SE"); 
 var per2 = new CreatePerson("xiyin",23,"FF");

CreatePerson.prototype设置了一个函数对象的属性firstname,和一个方法getName(),那CreatePerson实例(例中:per1,per2)出来的普通对象就继承了这些属性和方法,这就是原型的作用。

用一副图来说明理解这整个过程,图如下:

时间: 2024-10-11 06:30:42

js中原型,原型链的学习与认识的相关文章

js中的原型与原型链详解

js中的原型与原型链详解 记住下面三句话就可以理解原型: 所有的函数数据类型都天生自带一个属性Prototype(原型)这个属性的值是一个对象,浏览器会默认给他开辟一个堆内存 在浏览器给prototype开辟的堆内存当中有一个天生自带的属性是constructor,这个属性存储的值是当前函数本身 每一个对象都有一个__proto__的属性,这个属性指向当前实例所属类的prototype(如果不能确定他是谁的实例,都是Object的实例) 原型链:如果引用构造函数的实例想要查找某个属性p的话: 首

谈谈JS中的原型

不知道大家对JS中的原型理解的怎么样,我想如果大家对JS中的原型对象以及prototype属性十分熟悉的话对后面原型链以及继承的理解会十分的容易,这里想和大家分享自己对其的理解,请先看下面这段代码O(∩_∩)O~~ 1 function Person(){ 2 } 3 Person.prototype.name = "jingzi"; 4 Person.prototype.age = 20; 5 Person.prototype.sayName = function(){ 6 aler

js中的原型、继承的一些想法

最近看到一个别人写的js类库,突然对js中的原型及继承产生了一些想法,之前也看过其中的一些内容,但是总不是很清晰,这几天利用空闲时间,对这块理解了一下,感觉还是有不通之处,思路上没那么条理,仅作为分享, 一.instanceof 在JavaScript有instanceof运算符,是二元运算符,使用方法 instanceA instanceof A,返回值是布尔值(boolean),含义是判断instanceA是否是A的一个实例,其实质是判断A.prototype===instanceA.__p

js中的作用域链

js中的执行环境: 所谓执行环境(有时也称环境)它是JavaScript中最为重要的一个概念.执行环境定义了变量或函数有权访问的其他数据 ,决定了它们各自的行为.而每个执行环境都有一个与之相关的变量对象,环境中定义的所有变量和函数都保存在这个对象中. js中的作用域链: 每个函数都有自己的执行环境,当代码在执行环境中执行时,就会创建变量对象的作用域链.作用域链保证了对执行环境有权访问所有变量和函数的有序访问.作用域链的前端,始终都是当前执行的代码所在的环境的变量对象,如果环境是一个函数,那么它的

JS中的原型继承机制

转载 http://blog.csdn.net/niuyongjie/article/details/4810835 在学习JS的面向对象过程中,一直对constructor与prototype感到很迷惑,看了一些博客与书籍,觉得自己弄明白了,现在记录如下: 我们都知道,在JS中有一个function的东西.一般人们叫它函数.比如下面的代码 js代码: [javascript] view plaincopy function Person(name) { alert(name); } Perso

js中的原型prototype

var arr1 = new Array(12,34,98,43,38,79,56,1); arr1.sum=function (){ var result = 0; for(var i=0; i<this.length; i++){ result += this[i]; } return result; }; alert(arr1.sum()); 如果现在还有个arr1 对象也要求和 var arr2 = new Array(54,29,1,10); 那么还要给 arr2再添加一个求个的方法

JS中的原型--Prototypes

一.对象中的原型_proto_ JavaScript中的对象是基于原型的.原型是其他对象的基础,它定义并实现了一个新创建的对象必须包含的成员列表.原型对象为所有对象实例所共享. 对象通过一个内部属性绑定到它的原型.在FireFox.Safari.和Chrome浏览器中,这个属性_proto_对开发者可见.一旦你创建一个内置对象(比如Object和Array)的实例,它们就会自动拥有一个Object实例作为原型. 因此,对象可以拥有两种成员类型:实例成员和原型成员.实例成员直接存于对象实例中,原型

JS中的原型对象与构造器

在Javascript中:原型对象是属于构造函数的,不属于实例:实例只能共享原型对象中的属性和方法(当然也可以有自己的属性和方法,或者覆盖原型中同名的属性和方法):构造器constructor属于原型的,不属于实例:实例之所以能有constructor属性是因为它共享了原型对象的所有成员,包括原型对象的constructor属性: function Wede(){this.name="zhao"} //输出构造函数的原型对象console.log(Wede.prototype); //

js中的原形链问题

---恢复内容开始--- 一.在js中大家讨论的原形链都是围绕在prototype和__proto__. 1.__proto__是内部原型 2.prototype是构造器原型(构造器就是构造函数) 3.所有的构造器(构造函数)的__proto__都指向Function.prototype 4.所有的构造器(构造函数)都可以被看做是由Function()创建(new ==>  fn = new Function()  ,obj = new Function() ) 5.现在关于Function()

js中substring与substr的学习。

今天在工作的过程中,看到js中两个双胞胎函数.分别是substring与substr.顿时被两个可恶的家伙给迷惑住了,不知道具体有什么作用.. 先来看看substring手册是怎么介绍的. 手册解释的还是比较清楚的.不过还是用我的自己话给总结一下,顺便来个栗子巩固一下. 在这里你可以把字符串当成类数组的对象.既然是数组,那么就有下标,下标是从0开始的. start  与 stop 都不能是负数.下标不能为负所致. 开始数值不能比结束的还大,否则会颠倒开始与结束的次序. 截取的字符串数量,是结尾减