关于prototype属性的理解

众所周知,prototype是一个属性对象,只要创建一个新函数,就会根据特定的规则为该函数创建一个prototype属性,这个属性指向函数的原型对象。在默认情况下,所有原型对象都会自动获得一个constructor(构造函数)属性,这个属性包含一个指向prototype属性所在函数的指针。

需要注意的是,prototype是一个对象,他具体的内部结构是这样的:

//创建一个原型对象
function Foo(){};
console.log(typeof Foo.prototype);  // ‘object‘
Foo.prototype.x=1;Foo.prototype.show=function(){    alert(this.name);}
//则其内部结构
Foo.prototype
{
     constructor:Foo,
     _proto_:Object.prototype,     show:function()...
     x:1;
}

根据其内部结构我们再来看最上面的一句话,每个由原型对象创建的对象实例,都会有一个prototype属性,其指向原型对象的prototype属性。原型对象都会自动获得一个constructor属性,这个属性包含一个指向prototype属性所在函数的指针,即在这里的 Foo.prototype.constructor指向Foo.

接下来我们在定义这样一段代码

var foo=new Foo();
foo.name="小明";
//通过上面的说明,我们可以知道foo.prototype的内部结构
foo.prototype
{
       constructor:foo,
       _proto_:Foo.prototype,

}
foo.show(); //小明

这里,之所以foo对象实例能够调用show()方法的原因就是:js引擎在foo对象中没有找到show()方法,便通过其prototype属性对象中的_proto_属性向上找到Foo.prototype属性里面的show()方法,来完成调用。

时间: 2024-12-16 14:01:53

关于prototype属性的理解的相关文章

《prototype属性的理解》

1.对象:对象是JS的基本数据类型(原始类型(数字.字符串和布尔值),对象类型).对象是一种复合值:它将很多值(原始值或者其他对象)聚合在一起,可通过名字访问这些值. 2.三类JS对象和两类属性: 内置对象:是由ECMAScript规范定义的对象或类.例如,数组(Array).函数(Function).日期(Date)和正则表达式(RegExp)都是内置对象 宿主对象:由JS解释器所嵌入的宿主环境定义的.客户端JS中表示网页结构的HTMLElement对象均是宿主对象,既然宿主环境定义的方法可以

简单理解js的prototype属性

在进入正文之前,我得先说说我认识js的prototype这个东西的曲折过程. 百度js的prototype的文章,先看看,W3School关于prototype的介绍: 你觉得这概念适合定义js的prototype这个东西吗?你是否也认为prototype是一个object对象的属性呢?是的话,请认真认真看我这篇文章,因为这篇文章会毁灭你的人生三观,呵呵,就是有这么严重,因为本人就是被这个定义给害惨的. 不得不说,看了网上的一些介绍prototype的文章,基本上都说prototype是对象的一

prototype 以及 constructor 属性的理解

1 为什么 xx.constructor.prototype 可以访问到当前对象的原型. 'str'.constructor.prototype 'str'.constructor 指向当前对象的构造函数 (构造函数).prototype:即函数的prototype 属性 1 函数有prototype属性,所以可以访问到 2 函数的prototype属性会在创建实例的时候作为实例的原型而存在. 所以 'str'.constructor.prototype 就可以访问到当前对象实例的原型. 1 '

JS学习之prototype属性

javascript中的每个对象都有prototype属性,Javascript中对象的prototype属性的解释是:返回对象类型原型的引用.以A.prototype = new B();为例, 理解prototype不应把它和继承混淆,A的prototype为B的一个实例,可以理解A将B中的方法和属性全部克隆了一遍,A可以使用B的方法和属性,这里强调的是克隆而不是继承,可以出现这种情况:A的prototype是B的实例,同时B的prototype也是A的实例. 1 function base

js中的prototype属性

javascript中的每个对象都有prototype属性,Javascript中对象的prototype属性的解释是:返回对象类型原型的引用. 这个属性非常有用:为一个特定类声明通用的变量或者函数. 你不需要显式地声明一个prototype属性,因为在每一个构造函数中都有它的存在. 例如: function cat() { } alert(cat.prototype); //输出的是"Object" 由此可以看出,prototype是一个对象,那么这个对象有什么用呢 例如有一个Peo

Spring的scope="prototype"属性

Spring的scope="prototype"属性 可以利用容器的scope="prototype"来保证每一个请求有一个单独的Action来处理, 避免struts中Action的线程安全问题.这句话怎么理解呢如果用单例方式会有什么样的结果呢? spring 默认scope 是单例模式这样只会创建一个Action对象每次访问都是同一个Action对象,数据不安全struts2 是要求 每次次访问 都对应不同的Action scope="prototyp

Javascript中prototype属性的详解

原文链接:http://www.cnblogs.com/Uncle-Keith/p/5834289.html 在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不存在类(Class)的概念的,javascript中不是基于‘类的’,而是通过构造函数(constructor)和原型链(prototype chains)实现的.但是在ES6中提供了更接近传统语言的写法,引入了Class(类)这个概念,作为对

js函数prototype属性学习(一)

W3school上针对prototype属性是这么给出定义和用法的:使您有能力向对象添加属性和方法.再看w3school上给的那个实例,如下图: 仔细一看,原来最基本的作用就是对某些对象的属性.方法来扩展,我对这个实例又多写了几句代码进行测试,如下: var steve= new empolyee("Steve Jobs","enterpriser",1977); 这里我专门查看了steve这个实体所拥有的属性,发现多了一个salary属性,这个属性是新建实体时未曾

JS 中 讨厌的 prototype constructor _pro_ 理解

这几天一直在看着块,哎,看的人头都大了,差不多明白了,总结一下. prototype:创建的每一个函数都有一个prototype属性,这个属性指向一个prototype对象.即他是通过构造函数而创建的实例对象的原型对象(属性存在于构造函数中). constructor:这个属性在原型对象中,指向函数中的prototype属性.(存在于原型对象中,原型对象===原型) _proto_:这个属相存在于实例中,指向原型. 举个栗子: function ljd(){ this.name="ljd&quo