原型链分享
原项链详解
什么是原型链:
javaScript 常被描述为一种基于原型的语言(prototype-based language) ——每一个对象拥有一个原型对象,对象以其原型为模版,从原型通过(_proto_)属性继承方法和属性,原型对象也是对象也拥有自己的原型对象并从中通过(_proto_)属性继承方法和属性,一层一层,以此类推。这种靠(_proto_)属性串起来的关系被称为原型链(prototypechain),它解释了为什么一个对象会拥有定义在其他对象中的属性和方法。
概念理解
对象包括普通对象和函数对象,
1,什么是函数对象?
2 什么是普通对象?
原项链的起源
到底是先有的鸡还是先有有的蛋呢 ?还是无中生有呢?
疑问一:谁是JS的起源?
整个js起源于 Object和Function两个类。
疑问二:
Object和Function系统自带的函数对象,谁创建的谁呀?
没有谁创建的谁,Object和Function分别被定义的,同时产生的。
证据在哪?
1,Object 详解
Object.prototype详解
几乎所有的 JavaScript 对象都是 Object 的实例;一个典型的对象继承了Object.prototype的属性(包括方法),尽管这些属性可能被遮蔽(亦称为覆盖)。但是有时候可能故意创建不具有典型原型链继承的对象,比如通过Object.create(null)创建的对象,或者通过Object.setPrototypeOf方法改变原型链。
改变Object原型,会通过原型链改变所有对象;除非在原型链中进一步覆盖受这些变化影响的属性和方法。这提供了一个非常强大的、但有潜在危险的机制来覆盖或扩展对象行为。
只有两个属性constructor指向它所属的函数对象的名称Object()._proto_指向null对象
new Object () 生成的实例结果决定了其prototype属性所指的原型对象的类型。
2, Function 详解
new Function () 生成的实例结果决定了其prototype属性所指的原型对象的类型。
3 Object和Function 是怎么联系在一起的呢?
4,原型关系图
typeof 基本的类型
instantof 是不是在同一个原型上
定义在constructor和prototype的属性和方法都会被继承到实例对象。定义在在对象的方法不会被继承。