一、 题目
- 如何准确判断一个变量是数组类型
- 写一个原型链继承的例子
- 描述new一个对象的过程
二、知识点
1.构造函数
function Foo(name, age){
this.name = name
this.age = age
this.class = 'class-1'
// return this //默认有这一行
}
var f = new Foo('zhangsan', '20')
//var f1 = new Foo('lisi', 22) //可创建多个对象
特点:默认函数首字母大写,构造函数并没有显示返回任何东西。new 操作符会自动创建给定的类型并返回他们,当调用构造函数时,new会自动创建this对象,且类型就是构造函数类型。
2.构造函数—扩展
var a = {} 其实是 var a = new Object()的语法糖
var a = [] 其实是 var a = new Array()的语法糖
function Foo(){…} 其实是 var Foo = new Function(){…}
使用instanceof判断一个函数是否是构造函数
3.原型规则和示例
原型规则是原型链的基础
- 所有引用类型(数组、对象、函数),都具有对象特性,即可自由扩展属性(除‘null’以外)
- 所有引用类型(数组、对象、函数),都具一个_proto_ (隐式原型)属性,属性值是一个普通对象
- 所有函数,都有一个prototype(显式原型)属性,属性值也是一个普通对象
- 所有引用类型(数组、对象、函数),_proto_ (隐式原型)属性值指向它的构造函数的prototype(显式原型)属性值
- 当试图得到一个对象的某个属性时,如果这个对象本身没有这个属性,那么会去它的_proto_ (即它的构造函数的prototype)中寻找
var obj = {}; o