在创建函数时候,内存会自动为其开辟两块空间来存放,一个存放函数本身,一个存放函数的原型对象
- 每一个函数都有一个原型对象(prototype)
- 每一个对象都有一个constructor属性(构造者)
1.声明在函数内部的方法,即静态方法,只能函数本身调用
- assign(obj1,obj2):将第二个对象合并到第一个参数对象中
- keys(obj):获取所有属性名的集合
- values(obj):获取所有属性值的集合
- defineProperty(obj,'key',{ }):定义属性
2.在原型对象中有一些属性和方法,也就是所谓的非静态方法,声明在函数的原型对象中,是公用的,函数原型对象本身和实例对象均可以调用
eg:函数原型对象本身调用
Object.prototype.constructor ---->返回值结果为object
eg:实例对象调用
obj.constructor ---->返回值也为object类
3.obj实例中并没有写toString()和valueOf()方法,可是它可以调用,是因为obj实例可以继承Object构造函数原型对象的方法来使用。
4.如图所示
若将Object构造函数比作母亲,其产生的原型对象比作父亲,实例是儿子(由母亲产生也就是OBject构造函数,obj由new Object()产生),这样理解,儿子可以用父亲所拥有的东西。儿子什么都没有,但是儿子可以问父亲要。