最近,我学习了jquery的源码,有个很深的认识就是——当对js的基本语法和面向对象思维了解比较熟悉之后,js真正的精髓在通过阅读一些优秀的框架源码也显现出来,我个人总结为对原型(原型链)和闭包两个基本认识上的大头的全面认识和灵活运用,当然还有在编码路上需要慢慢积累的数据结构、代码技巧、内存管理和事件回调机制经验等方面知识的掌握。

所以今天写了几行代码试了试原型的脾性,看下面代码:

function chainOne(){
this.name1="zhuxingyu";
this.age1=20;
} var a=new chuainOne();//创建实例并执行该函数 console.log(a.name1); //zhuxingyu console.log(chainOne.prototype);//Object{}
chainOne.prototype={
name2:"chenjiajun",
age2:23,
name1:"lujian"
} console.log(chainOne.prototype); //Object{name2:"chenjiajun“,age:23,name1:"lujian"}
console.log(new chainOne().name2);//chenjiajun
console.log(new chainOne().name1);//zhuxingyu

  

  从上面代码可以看出,用构造函数内部this指向的属性,在fnname.prototype(原型)中为{},属性不可见,但实例对象可访问属性。再通过fnname.prototype=对象,这时fnname.prototype(原型)的值为对象,且实例对象此时,注意是此时可以访问fnname.prototype的属性,我们用对象中的一个属性(与构造函数内属性同名)name1希望来覆盖构造函数中的属性,结果是优先输出构造函数里的属性,覆盖不了。再看下面:

function chainOne(){
this.name1="zhuxingyu";
this.age1=20;
}
var a=new chuainOne();//创建实例并执行该函数
console.log(a.name1); //zhuxingyu
console.log(chainOne.prototype);//Object{}
chainOne.prototype={
name2:"chenjiajun",
age2:23,
name1:"lujian"
} console.log(chainOne.prototype); //Object{name2:"chenjiajun“,age:23,name1:"lujian"}
console.log(new chainOne().name2);//chenjiajun
console.log(new chainOne().name1);//zhuxingyu
           function chainTwo(){}

           chainTwo.prototype={
name3:"yinjun",
age3:18
} chainOne.prototype=chainTwo.prototype; console.log(chainOne.prototype); //Object{name3:"yinjun",age3:18} console.log(new chainOne().name2);//undifined    console.log(new chainOne().name3);//yinjun

  

     上面的代码可以看出,chainOne.prototype(原型)会随着赋给它的对象的不同而其内容会变成相应对象的内容,形式就如同一个普通的变量,但fnname.prototype(原型)会一直拥有构造函数fnname生产的实例对象指向它的指针,同时构造函数内部的属性在new构造时会将属性放在fnname.prototype中(如果是这样,那么这部分属性应该被强制隐藏与保存,并且拥有专权)或者fnname.prototype通过指针指向的内存区域中,所以实例对象可以访问到fnname.proyotype区域和其通过指针指向的区域中的属性。

JS原型探索小记(一)的更多相关文章

  1. JS原型链

    JS作为发展了多年了对象语言,支持继承,和完全面向对象语言不同的是,JS依赖原型链来实现对象的继承. 首先JS的对象分两大类,函数对象和普通对象,每个对象均内置__proto__属性,在不人为赋值__ ...

  2. 深入分析JS原型链以及为什么不能在原型链上使用对象

    在刚刚接触JS原型链的时候都会接触到一个熟悉的名词:prototype:如果你曾经深入过prototype,你会接触到另一个名词:__proto__(注意:两边各有两条下划线,不是一条).以下将会围绕 ...

  3. 【09-23】js原型继承学习笔记

    js原型继承学习笔记 function funcA(){ this.a="prototype a"; } var b=new funcA(); b.a="object a ...

  4. js原型

    1.js基本类型和对象类型 js的简单类型包括数字(其中NaN为数字类型).字符串(类似'A'为字符,js没字符类型).布尔值.null值和undefined值.其他所有的值都是对象.数字.字符串和布 ...

  5. js原型链与继承(初体验)

    js原型链与继承是js中的重点,所以我们通过以下三个例子来进行详细的讲解. 首先定义一个对象obj,该对象的原型为obj._proto_,我们可以用ES5中的getPrototypeOf这一方法来查询 ...

  6. JS 原型链图形详解

    JS原型链 这篇文章是「深入ECMA-262-3」系列的一个概览和摘要.每个部分都包含了对应章节的链接,所以你可以阅读它们以便对其有更深的理解. 对象 ECMAScript做为一个高度抽象的面向对象语 ...

  7. js原型解析

    我们都知道javascript因为具有了继承以及变量等等一系列的特性之后才被人们认为具有一门编程语言的资格,在后续的不断发展中,js在原生的基础上扩展了基于jquery等等的库,甚至衍生了像node. ...

  8. 深入理解JS原型链与继承

    我 觉得阅读精彩的文章是提升自己最快的方法,而且我发现人在不同阶段看待同样的东西都会有不同的收获,有一天你看到一本好书或者好的文章,请记得收藏起来, 隔断时间再去看看,我想应该会有很大的收获.其实今天 ...

  9. 学习zepto.js(原型方法)

    学习zepto.js(原型方法)[1] 转载 新的一周,新的开始,今天来学习一下zepto里边的原型方法,就是通过$.进行调用的方法,也是可以通过$.fn进行扩展的方法: $.camelCase(): ...

随机推荐

  1. Xcode 缓存 帮助文档 隐藏文件夹显示方法

    删除Xcode的缓存路径是:/Users/用户名/Library/Developer/Xcode/DerivedData(默认情况下, 这是一个隐藏文件夹) 显示隐藏文件夹 指令如下:显示隐藏文件: ...

  2. 【Debug 报异常】Debug打断点报错

    用DEBUG启动项目,项目中打断点的,然后会报异常 解决方法: 第一步: 项目-->Java编译器-->Classfile Generation 复选框 全部勾选 第二步: 替换当前文件运 ...

  3. 关于Vector中的元素中含有指针成员的情况

    对于容器,当容器的各个元素为类类型,且该类类型中含有指针成员时: 如果类类型的析构函数中包含了对指针变量指向内存的释放操作,则在利用clear()函数删除容器所有元素时,会自动调用类的析构函数,自动实 ...

  4. 开发Portlet第二步:如何将Crystal静态Portlet转变成基于测试数据的动态Portlet?

    当基于Crystal的静态Portlet开发完成后,在与后台服务联调前,还需要将Portlet转换成基于测试数据的动态Portlet.具体步骤如下: 分步指南 复制Portlet项目,并修改相关的po ...

  5. hdu1213 并查集(不压缩)

    确定比赛名次 Problem Description 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名 ...

  6. Codeforces Round #375 (Div. 2) - D

    题目链接:http://codeforces.com/contest/723/problem/D 题意:给定n*m小大的字符矩阵.'*'表示陆地,'.'表示水域.然后湖的定义是:如果水域完全被陆地包围 ...

  7. SU Demos-05Sorting Traces-02Demos

    运行结果: 不足之处,欢迎批评指正.

  8. js不间断平滑地自动向上滚动

    <html> <head> <title>scroll up auto smooth</title> <style> *{ margin: ...

  9. HDU5735 : Born Slippy

    考虑DP,设$f[x]$表示最后一个是$x$时的最优解,则$f[x]=\max(f[y]+w[x]\ opt\ w[y])$,其中$y$是$x$的祖先. 注意到$w[i]<2^{16}$,那么将 ...

  10. html5代码,获取地理位置

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <meta htt ...