对象属性的查找顺序
来源:互联网 发布:mouldflow软件 编辑:程序博客网 时间:2024/04/28 17:00
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中的原始类型。
-----------------------------分隔线---------------------------
当访问一个对象中的属性时,是自下而上查找的。比如:
当调用cat.toString()时,查找toString()方法的顺序是这样的:
1.首先在cat对象自身上查找,没找到。
2.在Cat.prototype属性上找,没找到。
3.由于Cat.prototype本身是一个对象,这里就是Object,于是在Object上找,找到了。
另一个复杂一点的例子:
当调用cat.eat()时,查找eat()方法的顺序是这样的:
1.首先在cat对象自身上查找,没找到。
2.在Cat.prototype属性上找,没找到。
3.Cat.prototype已经被指向一个Animal的实例,于是在这个匿名实例上查找,没找到。
4.在Animal.prototype属性上查找,找到了。
5.假设在步骤4中还是没找到,由于Animal.prototype本身是一个Object,接下来还会在Object上查找。
“读”属性的时候存在原型继承,而“写”属性的时候没有原型继承。自身的属性会覆盖从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上查找。
- 对象属性的查找顺序
- Python 属性查找顺序
- python属性查找顺序
- jquery查找checked属性的对象
- Java类中类属性和对象属性的初始化顺序
- [Java] Java类属性和对象属性的初始化顺序
- JAVA类属性和对象属性的初始化顺序
- json解析对象时对象的属性的顺序
- 各浏览器 for-in 遍历对象属性的顺序差异
- 查找数组中对象的属性值是否存在
- 查找对象数组中某属性的最大最小值
- 【查找--静态查找】简单的顺序查找
- 顺序表的查找
- 顺序表的查找
- 顺序表的查找
- 顺序查找的改进
- 顺序表的查找
- 顺序表的查找
- 新年好
- new到底new出了什么
- 关于prototype
- 百度卫士正式发布
- Unsupported compiler 'com.apple.compilers.llvmgcc42' selected for architecture 'armv7' Xcode5
- 对象属性的查找顺序
- prototype方式继承
- 犀牛书第五版读书笔记——Chapter 2. Lexical Structure
- 犀牛书第五版读书笔记——Chapter 3. Datatypes and Values
- 犀牛书第五版读书笔记——Chapter 4. Variables
- 黑马程序员--Java学习笔记之集合框架
- 使用 HTML5 WebSocket 构建实时 Web 应用
- 犀牛书第五版读书笔记——Chapter 5. Expressions and Operators
- 犀牛书第五版读书笔记——Chapter 6. Statements