1.创建对象有几种方法、
//字面量
var object = new Object({name:1})
var o1 ={name:1}
//构造函数
var M = function(m){
this.name =m
}
var o2 = new M(3);
//object.create方法
var p = {name:1}
var o4 = Object.create();
2.原型 构造函数 实例 原型链
对象就是一个实例
new后面的就是一个构造函数
构造函数可以new一个实例
任何一个函数都可以作为构造函数
构造函数都有属性prototype 初始化一个空对象(原型对象)
构造器默认你声明的函数,来让原型对象知道自己是被哪个构造器构造的
constructor函数指向的是构造函数
实例.__proto__ === 构造函数.原型对象
原型链
object.prototype是原型链的顶端
在实例中没有找到的话。会向他上一层找,一直找到object.prototype,如果还没有找到就返回未定义
自我理解总结:
实例是由构造函数来生成的,但是跟他不是直接挂钩的 与构造函数的属性prototype的原型对象挂钩的
关系:实例.__proto__ === 构造函数.原型对象
原型对象的constructor函数 === 构造函数
构造函数都有属性prototype 是一个空对象,也就是原型对象
原型链
3.instanceof的原理 :识别正在处理的对象的类型
o3是不是m的实例
o3 instanceof m === true //判断 o3是否是m的实例
o3 instanceof Object === true
o3.__proto__ === M.prototype
M.prototype.__proto__ === Object.prototype
o3.__proto__.constaructor === m === true //找到他的原型对象的constaructor 就是他的构造函数 是不是 m
o3.__proto__.constaructor === object === false
构造函数也是一个对象
constaructor比instanceof更严谨
4.new运算符的原理
一个对象被new 继承构造函数的原型对象foo.prototype
构造函数被执行,this要指定新实例 new foo === new foo()