继承与原型链
来源:互联网 发布:重庆大数据培训 编辑:程序博客网 时间:2024/06/06 07:21
出处:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Inheritance_and_the_prototype_chain
javaScript 是动态的,并且本身不提供类实现。javaScript是基于原型的。
javaScript只有一种结构:对象。每个对象都有一个内部链接到另一个对象,成为它的原型prototype。该原型对象都有自己原型,等等,直到达到一个null 为原型的对象。根据定义,null没有原型,并且作为这个原型链prototype chain 中的最终链接。
基于原型链的继承
javaScript 对象是动态的属性包(指其自己的属性)。。JavaScript 对象有一个指向一个原型对象的链。当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依此层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾。
继承方法
在 JavaScript 里,任何函数都可以添加到对象上作为对象的属性。函数的继承与其他的属性继承没有差别,包括上面的“属性遮蔽”(这种情况相当于其他语言的方法重写)。
当继承的函数被调用时,this 指向的是当前继承的对象,而不是继承的函数所在的原型对象
使用不同的方法来创建对象和生成原型链
var o = {a: 1};
// o这个对象继承了Object.prototype上面的所有属性
// 所以可以这样使用 o.hasOwnProperty(‘a’).
// hasOwnProperty 是Object.prototype的自身属性。
// Object.prototype的原型为null。
// 原型链如下:
// o —> Object.prototype —> null
var a = [“yo”, “whadup”, “?”];
// 数组都继承于Array.prototype
// (indexOf, forEach等方法都是从它继承而来).
// 原型链如下:
// a —> Array.prototype —> Object.prototype —> null
function f(){
return 2;
}
// 函数都继承于Function.prototype
// (call, bind等方法都是从它继承而n.prototype —> Object.prototype —> null
使用构造器创建对象
在 JavaScript 中,构造器其实就是一个普通的函数。当使用 new 操作符 来作用这个函数时,它就可以被称为构造方法(构造函数)。
function Graph() {
this.vertices = [];
this.edges = [];
}
Graph.prototype = {
addVertex: function(v){
this.vertices.push(v);
}
};
var g = new Graph();
// g是生成的对象,他的自身属性有’vertices’和’edges’.
// 在g被实例化时,g.[[Prototype]]指向了Graph.prototype.
使用 Object.create 创建对象
ECMAScript 5 中引入了一个新方法:Object.create()。可以调用这个方法来创建一个新对象。新对象的原型就是调用 create 方法时传入的第一个参数:
var a = {a: 1};
// a —> Object.prototype —> null
var b = Object.create(a);
// b —> a —> Object.prototype —> null
console.log(b.a); // 1 (继承而来)
var c = Object.create(b);
// c —> b —> a —> Object.prototype —> null
var d = Object.create(null);
// d —> null
console.log(d.hasOwnProperty); // undefined, 因为d没有继承Object.prototype
- 继承与原型链
- 原型链与继承
- 继承与原型链
- 继承与原型链
- 继承与原型链
- 继承与原型链
- javascript原型链与原型继承
- JavaScript 原型、原型链与继承
- 原型对象与继承(原型链)
- JavaScript 原型与继承链
- javascript继承与原型链
- js原型链与继承
- JavaScript 继承与原型链
- JavaScript继承与原型链
- JS继承与原型链
- Js原型链与继承
- 原型-原型链-继承
- 浅析JavaScript原型链与原型链式继承
- 第二十一章 RPM 软件管理程序: rpm
- 勾股定理 —— 证明大全
- spring cloud网关zuul之filter注册
- 第二十一章 SRPM 的使用 : rpmbuild
- java倒计时,定时器
- 继承与原型链
- 模版语言
- MTK SmartPhone Record-(5)
- oracle splitstr 函数
- mysql权限管理
- 2017sdut省赛选拔(1)--poj2155(二维线段树的翻转)
- Apache官网的查看
- 第二十一章 YUM 线上升级机制
- oracle 删除大量数据后整理表(analyze table xxx compute statistics)