1. 构造函数
1 | function Foo(name,age){ |
构造函数-扩展
var a = {}
其实是var a = new Object()
的语法糖var a = []
其实是var a = new Array()
的语法糖function Foo(){...}
其实是var Foo = new Function(...)
- 使用
instanceof
判断一个函数是否是一个变量的构造函数
1 | 判断一个变量是否为数组: 变量 instanceof Array |
2.原型规则和示例
5条原型规则
所有的引用类型(数组,对象,函数), 都具有对象特性,即可自由扩展属性(除了’null’以外)
1
2
3
4
5
6
7
8
9
10
11var obj = {} ; obj.a = 100
var arr = [] ; arr.a = 100
function fn(){} ; fn.a = 100
console.log(obj.__proto__)
console.log(arr.__proto__)
console.log(fn.__proto__)
console.log(fn.prototype)
console.log(obj.__proto__===Object.prototype)所有的引用类型(数组,对象,函数), 都有一个proto属性(隐式原型),属性值是一个普通的对象
- 所有的
函数
,都有一个prototype
属性(显示原型),属性值也是一个普通的对象 - 所有的引用类型(数组,对象,函数),
__proto__
属性值指向它的构造函数的prototype
属性值 - 当试图得到一个对象的某个属性时,如果这个对象本身没有这个属性,那么会去它的proto中寻找
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17// 构造函数
function Foo(name,age){
this.name = name
}
Foo.prototype.alertName = function(){
alert(this.name)
}
// 创建示例
var f = new Foo('zhangsan')
f.printName = function(){
console.log(this.name)
}
// 测试
f.printName()
f.alertName()
f.toString() // 要去f.__proto__.__proto__中去查找