原型讲解一

原型:原型是什么,原型的作用,以及可以干什么?

为了说明这个问题,还是先创建一个构造函数

function Person(name,age){

this.name=name;

this.age=age;

}

var p=new Person();//new 就是用来实例化的,创建一个对象,就是在内存当中开辟一块空间用的

//干什么用的?

在构造函数被创建的时候,系统会默认关联一个原型对象

构造函数的方法与属性共享在这个原型对象里面

console.log(Person.prototype);

结果为:

 

看到这个有什么感想呢?首先可以确定是构造函数的原型确实是一个对象,下面贴一个已基本的原型链:

可以看到原型最终是回到了null,很难理解吧,好像有一篇关于原型的哲学思想的博客,里面的一句话特别的经典:万物皆为对象,而对象的始祖则是null

http://www.cnblogs.com/lvmylife/p/5625657.html

这篇博客比较完美的介绍了这个问题。摘里面的一段话:

万物初生时,一个null对象,凭空而生,接着Object、Function学着null的模样塑造了自己,并且它们彼此之间喜结连理,提供了prototype(object)和constructor(Function),一个给子孙提供了基因,一个则制造万千子子孙孙。

在JavaScript中,null也是作为一个对象存在,基于它继承的子子孙孙,当属对象。
 乍一看,null像是上帝,而Object和Function犹如JavaScript世界中的亚当与夏娃。

有了上面这段话的解释:希望原型链最终回到null的原因就不难解释了

其实我的解释是:null作为一个对象(不知道是不是一个构造函数),实例化一个Object构造函数对象,那么它的原型就是null,obejec.protoType(null创造了object)然后通过_proto_指向null了,不知道这么解释后,大家会不会更能理解一点了

时间: 2024-08-05 19:21:36

原型讲解一的相关文章

史上最清晰的JavaScript的原型讲解

一说起JavaScript就要谈的几个问题,原型就是其中的一个.说了句大话,史上最清晰.本来是想按照大纲式的行文写一下,但写到后边感觉其实就一个概念,没有什么条理性,所以下面就简单按照概念解释的模式谈下这个问题. 1.JavaScript的原型是什么? 原型,首先他是个对象.和在以对象为核心的JavaScript这门语言中的其他普通对象来说一样,只不过他的角色有点特殊.但首先要明白他就是一个对象,是一个无序的属性和值的序列对. 2.谁会具有原型这个对象? 所有的对象(包括函数这个对象)在默认的情

原型讲解二:原型是干什么用的

前面说了这么多的原型的概念,那么原型用在哪里呢? 之前说过,直接在构造函数外面定义一个函数方法,势必会造成全局的变量污染,那么怎么避免这个问题呢?那么就要涉及到在原型上面定义一个方法了: 范例: function Person(name,age,gender){ this.name=name; this.age=age; this.say=function("我是"+this.name); } 这是一个简单的构造函数,那么是怎么改进的呢? 改进1:为了防止每次建立一个对象,对象里包含一

js原型链部分详细使用说明案例

1. 'index.html'文件 ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>js原型讲解</title> </head> <body> <script src='js/person.js'></script> <script s

OpenCV之mixChannels()函数使用说明

step 1: 函数功能说明 mixChannels主要就是把输入的矩阵(或矩阵数组)的某些通道拆分复制给对应的输出矩阵(或矩阵数组)的某些通道中,其中的对应关系就由fromTo参数制定. step 2: 函数原型讲解 C++:   void  mixChannels (const Mat*  src , int  nsrc , Mat*  dst , int  ndst , const int*  fromTo , size_t  npairs ); src– Input array or v

一周工作总结(2)

这周终于开始那个叫做"千业财富"的项目了.开始做效果图,以及同时前端也在写小程序的静态页面了.我们.net则是没什么大的进展,仅仅是确定了代码管理和初始的项目解决方案,即团队如何协作已经落实,另外就是查找一些零碎的功能的解决之道.我呢,实话实说,这周有点水,有摸鱼的嫌疑,我这周对这个项目的唯一的贡献,好像就是仅仅网上复制整理出了一个处理二维码的方法,具体点就是能根据一个url和用户头像和一张背景图片生成一张二维码海报图片这种东西.对了,还有一点贡献就是和设计人员讲解讨论之前画的项目小程

深入理解枚举属性与for-in和for-of

首先要分清什么是可枚举属性,什么是不可枚举属性 1.可枚举属性 在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的.可枚举性决定了这个属性能否被for-in查找遍历到. 1.1怎么判断属性是否可枚举 js中基本包装类型的原型属性是不可枚举的,如Object, Array, Number等,如果你写出这样的代码遍历其中的属性: var num = new Number(); for(var pro in num) { console.log("

JavaScript继承基础讲解,原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承

说好的讲解JavaScript继承,可是迟迟到现在讲解.废话不多说,直接进入正题. 既然你想了解继承,证明你对JavaScript面向对象已经有一定的了解,如还有什么不理解的可以参考<面向对象JS基础讲解,工厂模式.构造函数模式.原型模式.混合模式.动态原型模式>,接下来讲一般通过那些方法完成JavaScript的继承. 原型链 JavaScript中实现继承最简单的方式就是使用原型链,将子类型的原型指向父类型的实例即可,即“子类型.prototype = new 父类型();”,实现方法如下

Javascript讲解系列之一 Prototype原型链

以前没有写博客的习惯,许多的技术积累都是自己稍微总结一下,很少共享,并非自私,而是工作比较忙,前几天接到一个电话面试不理想,才发现公司所用的DOJO并不被外面广泛接受,故而决定把自己所学分享出来,为夯实基础,也为与外界交流思想,形成一种渠道,如需联系,请发送至邮箱:[email protected]. 今天写Javascript系列之第一篇:Prototype原型链.在软件园里随便拉一个码农估计都会写JS,大部分也知道JS是基于原型的语言,但是如果问及JS原生对象(Object,Function

面向对象JS基础讲解,工厂模式、构造函数模式、原型模式、混合模式、动态原型模式

什么是面向对象?面向对象是一种思想!(废话). 面向对象可以把程序中的关键模块都视为对象,而模块拥有属性及方法.这样我们如果把一些属性及方法封装起来,日后使用将非常方便,也可以避免繁琐重复的工作.接下来将为大家讲解在JS中面向对象的实现. 工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,而由于在ECMAScript中无法创建类,因此用函数封装以特定接口创建对象.其实现方法非常简单,也就是在函数内创建一个对象,给对象赋予属性及方法再将对象返回即可. function createBlog(