使用不同的方法来创建对象和生成原型链
2016-01-20 17:27
351 查看
使用不同的方法来创建对象和生成原型链
使用普通语法创建对象
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等方法都是从它继承而来): // f ---> Function.prototype ---> Object.prototype ---> null
使用构造器创建对象
在 JavaScript 中,构造器其实就是一个普通的函数。当使用 new 操作符 来作用这个函数时,它就可以被称为构造方法(构造函数)。function Graph() { this.vertexes = []; this.edges = []; } Graph.prototype = { addVertex: function(v){ this.vertexes.push(v); } }; var g = new Graph(); // g是生成的对象,他的自身属性有'vertexes'和'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
使用 class
关键字
ECMAScript6 引入了一套新的关键字用来实现 class。使用基于类语言的开发人员会对这些结构感到熟悉,但它们是不一样的。JavaScript 仍然是基于原型的。这些新的关键字包括
class,
constructor,
static,
extends,
和
super.
"use strict"; class Polygon { constructor(height, width) { this.height = height; this.width = width; } } class Square extends Polygon { constructor(sideLength) { super(sideLength, sideLength); } get area() { return this.height * this.width; } set sideLength(newLength) { this.height = newLength; this.width = newLength; } } var square = new Square(2);
相关文章推荐
- android中初始化listview问题1
- SecondaryNameNode作用
- 框架模式 MVC 在Android中的使用
- strlen源码剖析
- 【React Native开发】React Native库版本升级(Upgrading)与降级讲解
- 非递归遍历二叉树小结
- Linux 查找目录下的所有文件中是否含有某个字符串
- JAVA线程池的分析和使用
- Linux 下虚拟机——Virtual Box
- 基类显式继承接口,类继承基类时又继承同一接口,引发接口方法混乱(显式继承接口的弊端)
- h5手机适配字体大小
- jQuery获取事件元素
- test
- 《Python for kids》学习笔记(三)
- 关于iOS 简单动画效果的实现(用 beginAnimations 和 commitAnimations 来实现最简单的动画)
- .NET MVC4.0如何部署到其他服务器上(如:192.168.1.101)
- AFNetworking2.0源码解析<二>
- 懒加载
- Spring源码学习20160120
- 微信时代我们如何运营——读《微信运营手册》有感