javascript prototype 初步理解

阅读 “華安” 写的 JavaScript中对象的prototype属性 的个人理解

此段代码仅仅是为了理解prototype而写的, 还有许多需要修改的地方,若想了解更多,还是建议阅读 華安 本人写的 js实现继承等多篇文章

       function point(x,y){
                if(x) this.x = x;
                if(y) this.y = y;
            }
            point.prototype.x=0;
            point.prototype.y=0;

            /**
            将一个对象设置为一个类型的原型,相当于通过实例化这个类型,为对象建立只读副本,
            在任何时候对副本进行改变,都不会影响到原始对象,
            而对原始对象进行改变,则会影响到副本,
            除非被改变的属性已经被副本自己的同名属性覆盖。用delete操作将对象自己的同名属性删除,则可以恢复原型属性的可见性。
            以上一段话分为四个方面理解
            1、 将 m_firstPoint 设置为 GETTER的原型,相当于实例化 GETTER这个类型, 返回新的 GETTER对象
            2、 对GETTER 的修改不会影响到 m_firstPoint 即 原始对象
            3、 如果修改了 m_firstPoint 属性的原始值, 则会影响到副本 GETTER 的属性值
            4、 如果m_firstPoint 的 属性x 被 副本 GETTER的同名属性覆盖(即 GETTER.prototype.x = 200)了,
                则,原始类型的值也就改变,除非通过 delete GETTER.x, 才可以回复原型属性的值

            **/
            function LineSegment(p1,p2){
                var m_firstPoint = p1;    //p1 对象
                var m_lastPoint = p2;    //p2 对象
                this.getFirstPoint = function(){
                    function GETTER(){};
                    //GETTER.prototype 是 m_firstPoint 的副本 (将一个对象设置为一个类型的原型,相当于通过实例化这个类型)
                    GETTER.prototype = m_firstPoint;
                    //GETTER.prototype.x = 200;
                    return new GETTER();            //返回副本对象
                }
                this.getLastPoint = function(){
                    function GETTER(){};
                    GETTER.prototype = m_lastPoint;
                    return new GETTER();
                }
            }
            var p1 = new point();
            var p2 = new point(2,3);
            var line1 = new LineSegment(p1,p2);
            var p = line1.getFirstPoint();
            p.x=100;
            console.log(p1.x);
            console.log(p.x)

若有不妥之处,还望指出,共同进步!

时间: 2024-10-13 16:43:22

javascript prototype 初步理解的相关文章

javascript 原型及原型链的初步理解

最近折腾了好久,终于是把js里面的原型和原型链做了个初步的理解: 在这里,我打个比喻: 我(child),我妈constructor(构造函数)生了我:别人问我老妈跟谁生的我,于是此时我妈会指向我爸爸(father),即constructor.prototype=father. 而我的爸爸可以表示为:child.__proto__;故又有了constructor.prototype===child.__proto__: 这时候,有人会问,__proto__这是什么,这就是构成原型链的一个引用,如

javascript高级篇——理解原型和作用域【连载中...】

说明: 该教程绕开了javascript的一些基本的语法知识,直接讲解javascript中最难理解的两个部分,也是和其他主流面向对象语言区别最大的两个部分--原型和作用域,当然,肯定少不了原型链和作用域链.帮你揭开javascript最神秘的面纱. 为什么要偏偏要讲这两个知识点? 这是我在这么多年学习javascript的经历中,认为最难理解.最常犯错的地方,学习这两个知识点,会让你对javascript有更深层次的理解,至少理解了原型和作用域,就不能再算是javascript菜鸟了.另外,这

JavaScript prototype 使用介绍

JavaScript prototype 使用介绍 用过JavaScript的同学们肯定都对prototype如雷贯耳,但是这究竟是个什么东西却让初学者莫衷一是,只知道函数都会有一个prototype属性,可以为其添加函数供实例访问,其它的就不清楚了,最近看了一些 JavaScript高级程序设计,终于揭开了其神秘面纱 用过JavaScript的同学们肯定都对prototype如雷贯耳,但是这究竟是个什么东西却让初学者莫衷一是,只知道函数都会有一个prototype属性,可以为其添加函数供实例访

【JavaScript】深入理解JavaScript之强大的原型和原型链

由于JavaScript是唯一一个被广泛使用的基于原型继承的语言,所以理解两种继承模式的差异是需要一定时间的,今天我们就来了解一下原型和原型链. AD: hasOwnProperty函数: hasOwnProperty是Object.prototype的一个方法,它可是个好东西,他能判断一个对象是否包含自定义属性而不是原型链上的属性,因为hasOwnProperty 是 JavaScript 中唯一一个处理属性但是不查找原型链的函数. // 修改Object.prototype Object.p

JavaScript prototype 详解(对prototype 使用的一些讲解)

对JavaScript有一定了解的你,对jquery不陌生吧,那你看jQuery源代码的时候对prototype 也一定有见过,如果对prototype有疑问或者想更深入的去了解与使用它,欢迎你继续往下阅读. 最初的用法是, 为了避免方法在构造器里随机数据被实例化时而产生重复的副本  后来被用在"继承"上面了, 注意, JS语义上是没有继承的, 这里说的是人为的实现.对于下面对JavaScript中类型名称叫做"对象"."函数"."类型

初步理解require.js模块化编程

初步理解require.js模块化编程 一.Javascript模块化编程 目前,通行的Javascript模块规范共有两种:CommonJS和AMD. 1.commonjs 2009年,美国程序员Ryan Dahl创造了node.js项目,将javascript语言用于服务器端编程,这标志”Javascript模块化编程”正式诞生. 在浏览器环境下,没有模块也不是特别大的问题,毕竟网页程序的复杂性有限:但是在服务器端,一定要有模块,与操作系统和其他应用程序互动,否则根本没法编程. node.j

JavaScript大杂烩7 - 理解内置集合

JavaScript内置了很多对象,简单的类型如String,Number,Boolean (相应的"值类型"拥有相同的方法),复杂一点的如Function,Object,Array,它们支撑起来JavaScript编程的基石.由于Number与Boolean很简单,这里就不多说了,下面着重介绍其他的内置对象. 万物之源 - Object对象 JavaScript是单根的,唯一的根就是Object对象,这个对象提供了几个还是不错的方法,值得了解一下. 1. hasOwnProperty

JavaScript大杂烩8 - 理解文本解析的"黄金搭档"

文本解析"黄金搭档" - String与RegExp对象 文本解析是任何语言中最常用的功能,JavaScript中也是一样,而正则表达式作为最常用的方式,JavaScript也同样是支持的,下面就来看看字符串对象与正则表达式对象的配合. 字符串的恒定性 在正式开始讨论字符串对象的成员之前,我们需要了解一点,那就是:与C#一样,JavaScript 的字符串是不可变的(immutable),String对象定义的方法都不会改变字符串的内容.像toUpperCase这样的方法,返回的是全新

[JavaScript原型继承理解一]

转:http://www.cnblogs.com/harolei/p/3740354.html 对于JavaScript的继承和原型链,虽然之前自己看了书也听了session,但还是一直觉得云里雾里,不禁感叹JavaScript真是一门神奇的语言.这次经过Sponsor的一对一辅导和自己回来后反复思考,总算觉得把其中的精妙领悟一二了. 1. JavaScript创建对象 在面向对象语言中,通常通过定义类然后再进行实例化来创建多个具有相同属性和方法的对象.但是在JavaScript中并没有类的概念