`

javascript读取和修改原型特别需要注意原型的读写不具有对等性

阅读更多

        对于从原型对象继承而来的成员,其读和写具有内在的不对等性。比如有一个对象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

 

文章来源:http://blog.csdn.net/aitangyong/article/details/39674937

分享到:
评论

相关推荐

    Javascript 读取Excel实例

    然而,在某些特定情况下,如在客户端处理用户上传的Excel文件,我们可能需要实现JavaScript读取Excel文件的功能。下面将详细介绍如何在JavaScript中实现这一功能,以及相关知识点。 1. **使用FileReader API** ...

    Javascript写入和读取txt文件

    ### JavaScript写入与读取TXT文件详解 #### 一、前言 在Web开发中,JavaScript主要用于客户端操作,而直接操作文件系统(如读写文件)通常被视为服务器端的任务。然而,在某些特定环境下,比如使用IE浏览器时,...

    深度探讨javascript函数的原型链和闭包

    理解函数的原型链和闭包对于深入掌握JavaScript至关重要。 首先,让我们看看函数的定义方式。在JavaScript中,我们可以使用`function`关键字直接定义函数,如`function fn(a, b) {}`。此外,函数也可以通过赋值语句...

    JavaScript彻底理解JavaScript原型PDF

    彻底理解 JavaScript原型 原型是JavaScript中一个比较难理解的概念,原型相关的属性也比较多,对象有"[[prototype]]"属性,函数对象有"prototype"属性,原型对象有"constructor"属性。 为了弄清原型,以及原型相关的...

    【技术分享】从浅入深 Javascript 原型链与原型链污染 .pdf

    JavaScript 原型链是语言的核心特性之一,它在实现对象的继承和共享属性时起着关键作用。本文将深入探讨JavaScript原型链的工作原理及其可能导致的安全问题——原型链污染。 首先,JavaScript 中的对象继承并不像...

    第15章 javascript面向对象与原型

    在深入讲解JavaScript面向对象与原型的知识点之前,首先需要了解JavaScript的基础知识。在JavaScript中,面向对象编程(OOP)的概念虽然存在,但是它的实现与传统基于类的语言有所不同。ECMAScript,也就是...

    用html+javascript读写txt文件

    用html+javascript读出写入txt文件

    JavaScript读写RFID、NFC HTM网页源码

    JavaScript读写RFID、NFC、NDEF的HTML网页脚本,包括:1、轮询读取ID卡卡号;2、读写ISO15693 NXP ICODE2标签;3、读写FM208CPU卡;4、读写MifareOne M1卡;5、读写NFC Ntag标签;6、读写低频T5557卡;7、读写智能...

    Web前端面试题目JavaScript(作用域,原型。原型链,闭包,封装函数).txt

    前端面试题,包含JavaScript的闭包,作用域,原型,原型链,上下文环境以及DOM,BOM封装函数深度克隆,以及一些常见的·JS问题,试题简单但是容易混淆,作为前端工程师必考题

    JavaScript中原型和原型链详解

    在理解原型和原型链时,需要注意构造函数和其prototype之间的关系,以及实例对象与它们之间的关系。原型链使我们能够构建更复杂和丰富的对象层次结构,通过继承和共享来扩展JavaScript对象的能力。 如果原型链中的...

    探索JavaScript的原型链:原型继承的奥秘

    ### 探索JavaScript的原型链:原型继承的奥秘 #### 一、JavaScript与原型继承的基础 JavaScript(简称JS)是一种广泛使用的高级编程语言,在Web开发中占据着核心地位。它的特性之一是基于原型的继承机制,这与其他...

    JavaScript中的原型和继承详解(图文)_.docx

    JavaScript 中的原型和继承详解 在深入探讨编程语言时,我们经常会遇到一些专业术语,比如“原型”和“继承”,它们是面向对象编程中的核心概念。JavaScript 作为一门灵活且功能强大的编程语言,其原型和继承的实现...

    JavaScript FSO实现客户端XML文件读写.pdf

    通过使用JavaScript的FSO和DOM,我们可以实现客户端XML文件的读写,提高了系统的通用性和灵活性。这种方法可以应用于各种文本文件的读写,具有很好的通用性。 本文介绍了使用JavaScript的FSO和DOM来实现客户端XML...

    javascript Map对象 原型 插件

    javascript Map原型,对象,实现javascript中的Map数据类型功能

    浅析Javascript原型继承 推荐第1/2页

    根据这个链接,JavaScript可以检查一个对象是否具有特定属性或方法,如果没有,则继续在原型链上查找,直到找到或链结束。 现在让我们来分析一个具体的原型继承例子: ```javascript function Gizmo(id) { this....

    使用 JavaScript 实现社交网络原型及其源代码.zip

    该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码...

    JavaScript中的prototype(原型)属性研究

    需要注意的是,现代浏览器和Node.js环境已经不再推荐直接修改或使用`__proto__`属性,而是应该使用`Object.setPrototypeOf`和`Object.getPrototypeOf`方法。 ### 原型和性能 虽然原型链提供了强大的继承机制,但...

    浅析JavaScript实现基于原型对象的“继承”.pdf

    通过对JavaScript的原型继承机制的介绍和实例分析,提出一个改进的“寄生组合模式”,使读者能够更好地理解和应用JavaScript的原型继承。 概述 JavaScript是一门面向Web的编程语言,具有高端、动态以及面向对象的...

    JavaScript原型链简单图解

    JavaSciptDOM基本操作,JavaScipt函数基础,JavaScipt流程语句,JavaScript变量,JavaScript数据类型,JavaScript数组,JavaScript正则表达式,JavaScript字符串函数,Window对象等图解。JS高手进阶的工具图谱

    javascript原型继承工作原理和实例详解_.docx

    ### JavaScript原型继承工作原理及实例详解 ...理解JavaScript中的原型继承机制对于深入掌握这门语言至关重要,特别是在进行高级编程任务时。希望本文能帮助您更好地理解和应用JavaScript中的原型继承。

Global site tag (gtag.js) - Google Analytics