`

对象属性的查找顺序

阅读更多
Therefore, property inheritance occurs only when you read property values, not when you write them. If you set the property p in an object o that inherits that property from its prototype, what happens is that you create a new property p directly in o. Now that o has its own property named p, it no longer inherits the value of p from its prototype. When you read the value of p, JavaScript first looks at the properties of o. Since it finds p defined in o, it doesn't need to search the prototype object and never finds the value of p defined there. We sometimes say that the property p in o "shadows" or "hides" the property p in the prototype object. Prototype inheritance can be a confusing topic.

“读”属性的时候存在原型继承,而“写”属性的时候没有原型继承。自身的属性会覆盖从prototype继承得到的属性。

-----------------------------分隔线---------------------------

利用原型继承,可以扩展javascript中的原始类型。
function test() {
    var word = "hello 2011";
    word.extendMethod();
}

String.prototype.extendMethod = function(){
    alert("this is a new method for String...");
};


-----------------------------分隔线---------------------------

当访问一个对象中的属性时,是自下而上查找的。比如:
function Cat(sName){
    this.name = sName;
}
var cat = new Cat("kitty");
cat.toString();

当调用cat.toString()时,查找toString()方法的顺序是这样的:
1.首先在cat对象自身上查找,没找到。
2.在Cat.prototype属性上找,没找到。
3.由于Cat.prototype本身是一个对象,这里就是Object,于是在Object上找,找到了。

另一个复杂一点的例子:
function Animal(nAge){
    this.age = nAge;
}
Animal.prototype.eat = function(){
    // eat something
};
function Cat(sName){
    this.name = sName;
}
Cat.prototype = new Animal();
Cat.prototype.constructor = Cat;
var cat = new Cat("kitty");
cat.eat();

当调用cat.eat()时,查找eat()方法的顺序是这样的:
1.首先在cat对象自身上查找,没找到。
2.在Cat.prototype属性上找,没找到。
3.Cat.prototype已经被指向一个Animal的实例,于是在这个匿名实例上查找,没找到。
4.在Animal.prototype属性上查找,找到了。
5.假设在步骤4中还是没找到,由于Animal.prototype本身是一个Object,接下来还会在Object上查找。
分享到:
评论

相关推荐

    Javascript原型链及instanceof原理详解

    instanceof:用来判断实例是否是属于某个对象,这个判断依据是什么呢?...实例对象属性查找顺序是:实例对象内部—->构造函数原型链—->实例对象父对象的原型链。 //继承机制 function A(){ } A.prototype.

    Excel VBA方法属性大全

    4. **按字母顺序排列**:在提供的文件中,如Course_s.htm、Course_A.htm等,内容可能按字母顺序组织,便于用户快速查找特定的对象、属性或方法。例如,所有以"A"开头的属性和方法会集中在一起,方便查找"A"相关的...

    Python对象的属性访问过程详解

    Python中的对象属性访问是编程中常见且至关重要的操作。当你尝试访问一个对象的属性,例如`obj.field`,Python会遵循一套预定义的查找规则,这个过程涉及到了类层次结构和对象的内部机制。让我们详细地分解这个过程...

    数据结构查找可见

    数据结构中的“查找”是计算机科学中一个基本且重要的概念,它涉及到在数据集合中寻找特定数据对象的过程。查找操作可以分为两种情况:搜索成功和搜索不成功。当搜索成功时,即找到了满足条件的数据对象,系统会报告...

    控件的TAB顺序

    1. **查找并修改控件的样式**:确保需要参与TAB顺序的控件包含`WS_TABSTOP`标志。 2. **调整`TABINDEX`值**:为控件分配适当的`TABINDEX`值,以确定其在TAB顺序中的位置。 #### 代码层面的修改 除了直接在资源文件...

    c++面向对象 背单词系统

    通过面向对象的设计方法,我们可以将每个单词及其相关属性(如词义、例句、音标等)封装成一个对象,形成单词类。每个单词对象可以有自己的方法,如显示单词信息、检查拼写等,这样既保持了数据的完整性,又便于对...

    python面向对象练习题.pdf

    - **新式类**:遵循广度优先原则,即按照MRO(Method Resolution Order,方法解析顺序)来进行查找。 **3. 特性** - 在Python 3中,不再区分经典类和新式类,所有的类都被认为是新式类,并且默认继承自`object`类。...

    MATLAB句柄图形的通用属性

    - **应用场景**:通过访问或修改 `Children` 属性,可以轻松地对子对象进行操作,如改变子对象的显示顺序、调整其属性等。 ##### 4. Clipping - **定义**:`Clipping` 属性决定了子对象是否仅在其父对象的边界内...

    学生信息管理系统的顺序表实现

    它支持随机访问,即可以通过下标直接访问到表中的任何一项,因此查找效率较高。 3. **成员类型**:班级成员主要分为两类:教师和学生。每种类型的成员具有不同的属性和职责。 - **教师**:教师的信息包括级别...

    python面向对象day04.txt

    用来记录方法的查找顺序 super 函数是按mro 顺序向上查找 函数重写 repr(obj) str(obj) int(obj) complex(obj) bool(obj) float(obj) len(obj) abs(obj) ... iter(obj) next(obj) 迭代器和可迭代对象...

    python对象模型

    标题“Python对象模型”所涉及的知识点包括Python中的面向对象编程(OOP)概念、属性查找机制、描述符(Descriptors)、对象的实例化以及OOP的三大特征:封装、继承和多态。以下是详细的知识点: 面向对象编程(OOP...

    数据结构第八章 查找表.doc

    本章主要讨论了查找表的基本概念和几种基本的查找方法,包括顺序查找和折半查找。 首先,关键字(keyword)是标识数据元素或记录的关键数据项,它可以是如名字、学号、电话号码等能用来定位信息的任何属性。关键字...

    jssort:JavaScript排序方法,将按给定数组中对象的多个字段进行排序

    jsSort将向下导航对象图以查找属性。 在此版本中,jsSort假定将定义所有属性,而不是空对象。 jsSort可以按日期,数字和字符串值排序。 可以通过在属性字符串的开头附加“ [ASC]”或“ [DESC]”来设置每个属性的...

    数据结构C语言 查找表 详细举例介绍PPT学习教案.pptx

    静态查找表是一种数据对象D,由具有相同特性的数据元素集合构成,每个元素都有能唯一标识它的关键字。它的基本操作包括创建表、销毁表、搜索元素以及遍历表。例如,创建一个静态查找表`Create(&ST, n)`会构造一个...

    自定义属性分组

    “字母排序显示+号分组”是指属性名在分组后会按照字母顺序排列,每个分组前面可能有一个“+”号。这里的“+”号通常用于展开或收起该组的详细内容,便于用户有选择性地查看或隐藏信息。例如,用户可以先看到大类...

    js 原型对象和原型链理解

    原型对象(Prototype)主要用于实现对象间的继承,而原型链(Prototype Chain)则是JavaScript查找对象属性和方法的机制。 首先,每个函数都有一个`prototype`属性,它是一个对象,用于创建该函数实例时提供共享的...

    城市数据库系统基于顺序表实现

    至于“支持ADT”(抽象数据类型)的概念,这表明城市数据库系统采用了面向对象编程的思想,定义了一个表示城市的ADT,包含了城市的基本属性(如名称、坐标)以及相关的操作(如插入、查找、删除和打印)。...

    C语言_线性表之顺序表

    5. **查找**:在顺序表中查找元素可以使用线性搜索,从头到尾遍历直到找到目标元素或遍历完整个表。如果需要高效的查找,可以考虑使用二分查找,但这要求顺序表是有序的。 6. **翻转**:顺序表的翻转可以通过交换...

    数据结构—刘小晶—例2.7——用顺序表结构写的学生成绩管理系统

    学生类将包含学生的属性,如学号、姓名、成绩等,而系统类则负责管理这些学生对象,提供上述的各种操作接口。 代码实现时,可以考虑使用STL中的`std::vector`作为顺序表的底层数据结构,因为它提供了动态扩展和收缩...

    集合对象排序

    每个对象都有自己的属性(或称为字段),这些属性定义了对象的状态,而方法则是对象可以执行的操作。例如,一个“学生”对象可能有“姓名”和“年龄”属性,以及“学习”和“玩耍”的方法。 排序,简单来说,就是...

Global site tag (gtag.js) - Google Analytics