对于从原型对象继承而来的成员,其读和写具有内在的不正确等性。比方有一个对象A,假设它的原型对象是B。B的原型对象是null。假设我们须要读取A对象的name属性值,那么JS会优先在A中查找。假设找到了name属性那么就返回;假设A中没有name属性。那么就到原型B中查找name。假设找到了就返回;假设原型B中也没有找到,因为此时已经到了原型链的最顶端。还是没有找到name,就直接返回undefined。在写的情况下,运行A.name="aty"。假设A中有name属性。那么会改动name属性的值。假设A没有name属性。那么会在A中新增一个name属性,不会有查找原型的过程。

为什么写的时候不理会原型呢?也可以理解,由于原型是全部对象共享的,通过这样的类似的copy-on-write机制。可以保证对象之间不会相互影响。

这样的机制有好有坏,在使用的时候须要注意。

function Person()
{
} //为Person类的原型加入数据
Person.prototype.plainProp="hi";
Person.prototype.objectProp={"age":10}; var a = new Person();
var b = new Person(); a.plainProp="hello";//又一次赋值。没有改变原型 //没有对引用又一次赋值。仅仅是通过引用改动对象的属性
a.objectProp.age=20; alert(a.plainProp);//hello
alert(b.plainProp);//hi
alert(a.objectProp.age);//20
alert(b.objectProp.age);//20

上面代码能够发现。对于原型的写确实有copy-on-write特性。假设我们想知道,属性或方法究竟是来自对象自身,还是来自原型。那么能够使用Object.hasOwnProperty()函数。JS中差点儿全部的函数都不区分数据究竟是来自对象自身,还是其原型链。仅仅有这一个函数区分。

//測试属性是在自身对象,还是在原型中
alert(a.hasOwnProperty("plainProp"))//true
alert(a.hasOwnProperty("objectProp"));//false

javascript读取和改动原型特别须要注意的事儿,由于原型的读写不具有对等性的更多相关文章

  1. 【JavaScript】 JS面向对象的模式与实践 (重点整治原型这个熊孩子 (/= _ =)/~┴┴ )

    参考书籍 <JavaScript高级语言程序设计>—— Nicholas C.Zakas <你不知道的JavaScript>  —— KYLE SIMPSON   在JS的面向 ...

  2. 简单使用JSON,JavaScript读取JSON文本(三)

    JavaScript 读取 JSON 文本转换为对象 JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSON 数据转换为 Jav ...

  3. JavaScript提高篇之面向对象之单利模式工厂模型构造函数原型链模式

    1.单例模式 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  4. JavaScript进阶(六)用JavaScript读取和保存文件

    用JavaScript读取和保存文件 因为Google还不提供同步插件数据的功能,所以导入和导出插件配置就必须和文件打交道了.而出于安全原因,只有IE才提供访问文件的API:但随着HTML 5的到来, ...

  5. javascript读取xml文件读取节点数据的例子

    分享下用javascript读取xml文件读取节点数据方法. 读取的节点数据,还有一种情况是读取节点属性数据. <head> <title></title> < ...

  6. JavaScript 读取修改元素 及 伸拉门案例

    JavaScript 读取修改元素 及 伸拉门案例 版权声明:未经授权,严禁转载! 读取 / 修改元素 - 读取修改元素内容 - 读取修改元素属性 - 读取修改元素样式 元素的内容 读取或修改元素节点 ...

  7. JavaScript读取本地json文件

    JavaScript读取本地json文件 今天调试了一上午,通过jQuery读取本地json文件总是失败,始终找不出原因,各种方法都试了 开始总以为是不是json格式的问题.高了半天不行 后来读了一个 ...

  8. 深入JavaScript对象(Object)与类(class),详细了解类、原型

    JavaScript基于原型的对象机制 JavaScript原型上的哪些事 一.JavaScript基于原型的对象机制 JavaScript对象是基于原型的面向对象机制.在一定程度上js基于原型的对象 ...

  9. 深入理解javascript原型和闭包(3)——prototype原型 (转载)

    深入理解javascript原型和闭包(3)——prototype原型   既typeof之后的另一位老朋友! prototype也是我们的老朋友,即使不了解的人,也应该都听过它的大名.如果它还是您的 ...

随机推荐

  1. Android AAR 混淆的坑

    一定不要忘记加上这段 -keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,A ...

  2. 【SaltStack】SaltStack研究心得

    基础篇 ------------------------------------------------------------------------------------------------ ...

  3. 关于springmvc返回json格式数据

    1.引入maven依赖 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifac ...

  4. 【19】javascript有哪些方法定义对象

    创建Object的方式有4种. 方式一: 通过对象字面量表示法(又称为直接量.原始方式). var obj = {name:"moyu"}; 方式二: 通过new和构造函数Obje ...

  5. Educational Codeforces Round 31

    A. Book Reading time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  6. 【java基础 11】java集合框架学习

    导读:本篇博客主要是从整体上了解java的集合框架,然后主要介绍几个自己在项目中用到的结构,比如说:hashtable.hashmap.hashset.arraylist等! 一.宏观预览 从宏观上看 ...

  7. BZOJ 4259 残缺的字符串 ——FFT

    [题目分析] 同bzoj4503. 只是精度比较卡,需要试一试才能行O(∩_∩)O 用过long double,也加过0.4.最后发现判断的时候改成0.4就可以了 [代码] #include < ...

  8. SPOJ GSS6 Can you answer these queries VI ——Splay

    [题目分析] 增加了插入和删除. 直接用Splay维护就好辣! 写了一个晚上,(码力不精),最后发现更新写挂了 [代码] #include <cstdio> #include <cs ...

  9. Docker镜像分层技术

    Docker镜像管理 1.镜像分层技术 2.创建镜像 3.下载镜像到主机 4.删除镜像 5.上传镜像到registry docker镜像: 早在集装箱没有出现的时候,码头上还有许多搬运的工人在搬运货物 ...

  10. ifame标签

    一 w3c网址 http://www.w3school.com.cn/tags/tag_iframe.asp 二 iframe 元素会创建包含另外一个文档的内联框架(即行内框架). 三 页面显示及代码 ...