基本概念:
- 在js中,一切皆对象
- 每个对象都有一个指向它的原型的的内部链接(此链接还没有规范的访问方式,一般用__proro__代替),这个原型也有自己的原型,直到每个对象的原型为null为止
- 任意一个函数都可以作为构造器即var someFun = new AnyFun()
- 每个函数都有一个prototype属性,其它对象没有,该属性也是一个对象,该对象有一个constructor属性指向该函数
- 使用new去实例化一个函数后,得到的是一个对象。该函数的实例的原型指向构造函数的prototype属性
API
1.instanceof
,判断对象是否是构造函数的实例2.getPrototypeOf()
函数对象和普通对象
函数对象:通过new Function(),得到的对象,有_proto_和prototype两个属性普通对象:通过非Function()函数new得的对象,有_proto_一个属性总结:凡是通过 new Function() 创建的对象都是函数对象,其他的都是普通对象。
面向对象思想写tab切换
a.定义构造函数,并确定实例拥有的属性b.给原型添加行为,即方法c.实例化对象
1.
面向对象Tab切换 div1div2div3
2.
面向对象TAB切换 123
3.
面向对象TAB切换 123123
原型prototype、对象、构造函数
对象:属性跟方法的集合,属性是静态的数据,方法即行为,操作数据构造函数:在函数的前面出现new关键字,js内置的构造函数,Date/Object/RegExp/String/Number/Boolean/Function自定义构造函数:按照约定,首字母大写,跟普通函数区分调用: new Person() 返回实例对象var o = new Object();Object.prototype === o.__proto__原型prototype、对象、构造函数关系
对象是由构造函数创建,实例化的,字面量赋值,语法糖对象的属性/方法的查找,a.先从自身查找,找到返回,b.找不到沿着原型链上查找,找到返回,找不到重复b步骤,直到顶级Object.prototype构造函数、原型、实例三者之间的关系
构造函数:函数调用前存在关键字new的a.定义,为了跟普通函数区分,按照约定首字母大写
b.调用时使用关键字newc.返回值,创建出来的实例d.内部的this,指向创建出来的实例函数定义,必存在prototype属性,指向原型
原型:属性跟方法的集合,也是一个对象[__proto__]
实例:通过构造函数创建出来的对象必存在属性__proto__,指向原型,对象属性的查找,先从自身查找,找不到,沿着原型链从原型查找...
换句话说,对象的属性跟方法从原型上继承下来,对象的属性、方法可以重写