JavaScript 之 原型和原型链
栏目: JavaScript · 发布时间: 7年前
内容简介:在JavaScript中,每个对象会有一个原型对象。对象会从原型对象继承一些属性和方法。在JavaScript中,访问一个对象的属性时,JS引擎会首先在该对象自身上线查找该属性。如果找到了,则直接返回该属性的值;如果没有找到,则会去改对象的原型上面继续查找。如果对象的原型上面也没有这个属性,则继续在原型对象的上原型上面查找,如此一级级继续往上,直到原型为null,此时JS引擎返回该对象的属性值为undefined。预测下面几个表达式的结果
几个概念
- 构造函数: 构造函数实际上是一个普通函数,通过new操作符,可以利用构造函数快速创建对象;
- prototype:每个构造函数自身上都会有一个prototype属性,该属性值为一个对象,这个对象具有一个constructor属性,constructor指向构造函数自身;
- 实例: 通过构造函数创建的对象,可以看做是该构造函数的实例;
- __proto__:通过构造函数创建的每个对象上面,都会有一个__proto__属性,该属性指向构造函数的prototype;
什么是原型
在JavaScript中,每个对象会有一个原型对象。对象会从原型对象继承一些属性和方法。
什么是原型链
在JavaScript中,访问一个对象的属性时,JS引擎会首先在该对象自身上线查找该属性。如果找到了,则直接返回该属性的值;如果没有找到,则会去改对象的原型上面继续查找。如果对象的原型上面也没有这个属性,则继续在原型对象的上原型上面查找,如此一级级继续往上,直到原型为null,此时JS引擎返回该对象的属性值为undefined。
继承
/**
* two methods to implement inheritance;
*/
function Base(type){
this.type = type;
}
Base.prototype.base=function(){
console.log(`${this.type} is in base func`);
}
// method one
function Sub(type){
this.type = type;
}
Sub.prototype = Object.create(new Base('base'));
Sub.prototype.sub=function(){
console.log(`${this.type} is in sub func`);
}
// method two
function Foo(type){
this.type = type;
}
Object.setPrototypeOf( Foo.prototype, new Sub('sub'));
Foo.prototype.foo=function(){
console.log(`${this.type} is in foo func`);
}
let sub = new Sub('sub1');
sub.base();
sub.sub();
sub instanceof Sub; // true
sub instanceof Base; // true
let foo = new Foo('foo1');
foo.base();
foo.sub();
foo.foo();
foo instanceof Foo; // true
foo instanceof Sub; // true
foo instanceof Base; // true
一些实例
Object.getPrototype
预测下面几个表达式的结果
Object.getPrototypeOf(function(){}).constructor === Function;
Object.getPrototypeOf(Function).constructor === Function;
Object.getPrototypeOf(Object.getPrototypeOf(Function)).constructor === Object;
答案:
true;
如何创建一个没有任何原型的对象?
let obj = Object.create(null); console.log(obj);
这篇medium上获得8.6K赞的文章 Prototypes in JavaScript 讲得很清楚了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Linux Command Line
William E. Shotts Jr. / No Starch Press, Incorporated / 2012-1-17 / USD 39.95
You've experienced the shiny, point-and-click surface of your Linux computer-now dive below and explore its depths with the power of the command line. The Linux Command Line takes you from your very ......一起来看看 《The Linux Command Line》 这本书的介绍吧!
JS 压缩/解压工具
在线压缩/解压 JS 代码
CSS 压缩/解压工具
在线压缩/解压 CSS 代码