@@ -62,7 +62,7 @@ F.call(f);
62
62
63
63
生成实例对象的常用方法是,使用` new ` 命令让构造函数返回一个实例。但是很多时候,只能拿到一个实例对象,它可能根本不是由构建函数生成的,那么能不能从一个实例对象,生成另一个实例对象呢?
64
64
65
- JavaScript 提供了` Object.create ` 方法,用来满足这种需求。该方法接受一个对象作为参数,然后以它为原型,返回一个实例对象。该实例完全继承原型对象的属性。
65
+ JavaScript 提供了` Object.create() ` 方法,用来满足这种需求。该方法接受一个对象作为参数,然后以它为原型,返回一个实例对象。该实例完全继承原型对象的属性。
66
66
67
67
``` javascript
68
68
// 原型对象
@@ -80,9 +80,9 @@ B.print() // hello
80
80
B .print === A .print // true
81
81
```
82
82
83
- 上面代码中,` Object.create ` 方法以` A ` 对象为原型,生成了` B ` 对象。` B ` 继承了` A ` 的所有属性和方法。
83
+ 上面代码中,` Object.create() ` 方法以` A ` 对象为原型,生成了` B ` 对象。` B ` 继承了` A ` 的所有属性和方法。
84
84
85
- 实际上,` Object.create ` 方法可以用下面的代码代替。
85
+ 实际上,` Object.create() ` 方法可以用下面的代码代替。
86
86
87
87
``` javascript
88
88
if (typeof Object .create !== ' function' ) {
@@ -94,7 +94,7 @@ if (typeof Object.create !== 'function') {
94
94
}
95
95
```
96
96
97
- 上面代码表明,` Object.create ` 方法的实质是新建一个空的构造函数` F ` ,然后让` F.prototype ` 属性指向参数对象` obj ` ,最后返回一个` F ` 的实例,从而实现让该实例继承` obj ` 的属性。
97
+ 上面代码表明,` Object.create() ` 方法的实质是新建一个空的构造函数` F ` ,然后让` F.prototype ` 属性指向参数对象` obj ` ,最后返回一个` F ` 的实例,从而实现让该实例继承` obj ` 的属性。
98
98
99
99
下面三种方式生成的新对象是等价的。
100
100
@@ -104,7 +104,7 @@ var obj2 = Object.create(Object.prototype);
104
104
var obj3 = new Object ();
105
105
```
106
106
107
- 如果想要生成一个不继承任何属性(比如没有` toString ` 和` valueOf ` 方法)的对象,可以将` Object.create ` 的参数设为` null ` 。
107
+ 如果想要生成一个不继承任何属性(比如没有` toString() ` 和` valueOf() ` 方法)的对象,可以将` Object.create() ` 的参数设为` null ` 。
108
108
109
109
``` javascript
110
110
var obj = Object .create (null );
@@ -113,9 +113,9 @@ obj.valueOf()
113
113
// TypeError: Object [object Object] has no method 'valueOf'
114
114
```
115
115
116
- 上面代码中,对象` obj ` 的原型是` null ` ,它就不具备一些定义在` Object.prototype ` 对象上面的属性,比如` valueOf ` 方法。
116
+ 上面代码中,对象` obj ` 的原型是` null ` ,它就不具备一些定义在` Object.prototype ` 对象上面的属性,比如` valueOf() ` 方法。
117
117
118
- 使用` Object.create ` 方法的时候,必须提供对象原型,即参数不能为空,或者不是对象,否则会报错。
118
+ 使用` Object.create() ` 方法的时候,必须提供对象原型,即参数不能为空,或者不是对象,否则会报错。
119
119
120
120
``` javascript
121
121
Object .create ()
@@ -124,7 +124,7 @@ Object.create(123)
124
124
// TypeError: Object prototype may only be an Object or null
125
125
```
126
126
127
- ` Object.create ` 方法生成的新对象,动态继承了原型。在原型上添加或修改任何方法,会立刻反映在新对象之上。
127
+ ` Object.create() ` 方法生成的新对象,动态继承了原型。在原型上添加或修改任何方法,会立刻反映在新对象之上。
128
128
129
129
``` javascript
130
130
var obj1 = { p: 1 };
@@ -136,7 +136,7 @@ obj2.p // 2
136
136
137
137
上面代码中,修改对象原型` obj1 ` 会影响到实例对象` obj2 ` 。
138
138
139
- 除了对象的原型,` Object.create ` 方法还可以接受第二个参数。该参数是一个属性描述对象,它所描述的对象属性,会添加到实例对象,作为该对象自身的属性。
139
+ 除了对象的原型,` Object.create() ` 方法还可以接受第二个参数。该参数是一个属性描述对象,它所描述的对象属性,会添加到实例对象,作为该对象自身的属性。
140
140
141
141
``` javascript
142
142
var obj = Object .create ({}, {
@@ -160,7 +160,7 @@ obj.p1 = 123;
160
160
obj .p2 = ' abc' ;
161
161
```
162
162
163
- ` Object.create ` 方法生成的对象,继承了它的原型对象的构造函数。
163
+ ` Object.create() ` 方法生成的对象,继承了它的原型对象的构造函数。
164
164
165
165
``` javascript
166
166
function A () {}
0 commit comments