Skip to content

Commit 0c40cc7

Browse files
committed
Update
1 parent a446e4d commit 0c40cc7

File tree

1 file changed

+40
-7
lines changed

1 file changed

+40
-7
lines changed

README.md

Lines changed: 40 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -166,9 +166,11 @@ JSON.parse('{"a":10."b":20}')
166166
* 原型链
167167
* instanceof
168168
#### 构造函数
169-
* 普通的函数就像是按步骤执行的动作,而构造函数更像是可更改零件的木偶,普通函数可以直接调用,但是构造函数需要new
170-
* 因为构造函数也是函数,所以可以直接被调用,但是它的返回值为undefine,此时构造函数里面的this对象等于全局this对象
169+
* 自己的想法
170+
* `普通的函数就像是按步骤执行的动作,而构造函数更像是可更改零件的木偶,普通函数可以直接调用,但是构造函数需要new`
171+
* `因为构造函数也是函数,所以可以直接被调用,但是它的返回值为undefine,此时构造函数里面的this对象等于全局this对象`
171172
* 扩展`实例和对象的区别,从定义上来讲:1、实例是类的具象化产品,2、而对象是一个具有多种属性的内容结构。`
173+
172174
```JavaScript
173175
funciton Foo(name,age){
174176
this.name = name;
@@ -179,18 +181,19 @@ funciton Foo(name,age){
179181
var f = new Foo('zhangsan',20); //实例化对象
180182
// var f1 = new Foo('lisi',22) //创建多个对象
181183
```
184+
182185
#### 构造函数-扩展
183186
* `var a = {}` 其实是 `var a = new Object()`的语法糖
184187
* `var a = []` 其实是 `var a = new Array()`的语法糖
185188
* `function Foo(){...}`其实是 `var Foo = new Function(...)`
186189
* 使用 `instanceof` 判断一个函数是否是一个变量的构造函数
187-
* 如果想判断一个变量是否为“数组”:变量 instanceof Array
190+
* 如果想判断一个变量是否为“数组”:变量 `instanceof Array`
188191

189192
## 01-05
190193
### 原型规则和示例
191-
*
192194
* 5条原型规则
193195
* 原型规则是学习原型链的基础
196+
#### 第1条
194197
* 所有的引用类型(数组、对象、函数),都具有对象特质、即可自由扩展属性(除了“NULL”以外)
195198
```JavaScript
196199
var obj = {}; obj.a = 100;
@@ -199,25 +202,55 @@ function fn(){
199202
fn.a=100;
200203
}
201204
```
202-
#### `__proto__`
205+
#### 第2条
203206
* 所有的引用类型(数组、对象、函数),都有一个`__proto__`(隐式原型)属性,属性值是一个普通的对象
204207
```JavaScript
205208
console.log(obj.__proto__);
206209
console.log(arr.__proto__);
207210
console.log(fn.__proto__);
208211
```
209-
#### `prototype`
212+
#### 第3条
210213
* `prototype`解释为JavaScript开发函式库及框架
211214
* 所有的函数,都有一个`prototype`(显示原型)属性,属性值也是一个普通对象。
212215
```JavaScript
213216
console.log(fn.prototype);
214217
```
215-
#### `__proto__``prototype`
218+
#### 第4条
216219
* 所有引用类型(数组、对象、函数),`__proto__`属性值指向它的构造函数的`prototype`属性值
217220
```JavaScript
218221
console.log(obj.__proto__ === Object.prototype);
219222
```
223+
#### 第5条
220224
* 当试图得到一个对象的某个属性时,如果这个对象本身没有这个属性,那么会去它的`__proto__`(即它的构造函数`prototype`)中寻找
225+
```JavaScript
226+
//构造函数
227+
function Foo(name,age){
228+
this.name = name;
229+
}
230+
Foo.prototype.alertName = function () {
231+
alert(this.name);
232+
}
233+
//创建示例
234+
var f = new Foo('zhangsan')
235+
f.printName = function () {
236+
console.log(this.name);
237+
}
238+
//测试
239+
f.printName();
240+
f.alertName();
241+
```
242+
* this
243+
#### 循环对象自身属性
244+
```JavaScript
245+
var item;
246+
for (item in f) {
247+
//高级浏览器已经在for in 中屏蔽了来自原型的属性
248+
//但是这里建议大家还是加上这个判断,保证程序的健壮性
249+
if(f.hasOwnProperty(item)) {
250+
console.log(item);
251+
}
252+
}
253+
```
221254

222255

223256

0 commit comments

Comments
 (0)