JS基础知识(2)-原型
2018-08-06 17:21
204 查看
每个函数都有 prototype 属性,除了 Function.prototype.bind(),该属性指向 原型。
每个对象都有 __proto__ 属性,指向了创建该对象的构造函数的原型。其实这个 属性指向了 [[prototype]],但是 [[prototype]] 是内部属性,我们并不能访问到, 所以使用 _proto_ 来访问。 对象可以通过 __proto__ 来寻找不属于该对象的属性,__proto__ 将对象连接起 来组成了原型链。
一个对象除了自身的显示属性外还隐含一个_proto_属性,这个属性指向创建该对象的构造函数的原型。
如:
[code]let foo={ //内部也是使用了 new Object() x: 10, y: 20 }
假设拥有两个对象,它们之间只有一小部分不同,其他部分都相同。显然,我们将会重用相似的功能/代码,如下calculate函数以及变量x为对b,c公用,则可以
[code]var a = { x: 10, calculate: function (z) { return this.x + this.y + z } }; var b = { y: 20, __proto__: a }; var c = { y: 30, __proto__: a };
通过构造函数来实现相同部分,也就是用构造函数来代替上述a的功能
[code] function Foo(y) { // function 就是个语法糖 内部等同于 new Function() this.y = y; } Foo.prototype.x = 10; Foo.prototype.calculate = function (z) { return this.x + this.y + z; }; var b = new Foo(20); var c = new Foo(30);
代码关系如下图:
每个对象都有一个原型。构造函数Foo也有自己的__proto__,值为Function.prototype,Function.prototype也通过其__proto__属性关联到Object.prototype。
对象可以通过 __proto__ 来寻找不属于该对象的属性,__proto__ 将对象连接起 来组成了原型链。
在ES6中有了类:
[code]class Foo { constructor(name) { this._name = name; } getName() { return this._name; } } class Bar extends Foo { getName() { return super.getName() + ' Doe'; } } var bar = new Bar('John'); console.log(bar.getName()); // John Doe
阅读更多
相关文章推荐
- js基础知识温习:构造函数与原型
- JS原型函数相关基础知识
- 有关JS中构造函数和原型函数的一些基础知识
- js原型基础
- js——基础知识
- JS之DOM基础知识总结
- JS学习2(基础知识)
- js基础知识总结
- js 的基础知识变量
- JS基础知识
- js基础知识
- js-ajax相关基础知识整理
- D3.js-基础知识
- js基础知识相关学习笔记记录
- H5基础知识第十一课时(JS解决变量自提升问题)
- js基础知识点
- socket基础知识及js中的Web Sockets
- JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模)
- JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)
- js基础知识——字符转换