javascript是一门动态语言(动态语言Dynamic Programming Language:动态类型语言,意思就是类型的检查是在运行时做的,也就是常说的“弱类型”语言),没有类的概念,有class保留字,但不能用作变量名
原型:Javascript中的每一个对象都有一个内部私有的连接指向另一个对象,这个对象就是原对象的原型 注意:原型是一个对象,其他对象可以通过他实现属性继承
原型链:这个原型对象也有自己的原型,直到对象的原型为null为止(也就是没有原型),这种一级一级的链结构就称为原型链
javascript中对象:在javascript中,一个对象就是任何无序键值对的集合,如果它不是一个主数据类型(undefined,null,boolean,number,string),那它就是一个对象
在这里一旦当某个对象的原型所引用的对象的属性被定义,就可以被多个引用它的实例所继承,即这些实例对象的原型所指向的就是这个原型对象。
基于原型链的继承:
继承属性:
javascript对象有两种不同的属性来源,一个是对象自身属性,另一是继承于原型链上的属性
例:
//假设有一个对象obj={a:1,b:2},并且obj所在的原型链如下: //{a:1,b:2} ---> {b:3,c:4} ---> null //a,b是obj自身的属性 //本例中,用“对象.[[Prototype]]”来表示这个对象的原型 alert(obj.a); //输出1 证明a是obj自身的属性 alert(obj.b); //输出2 证明b是obj自身的属性 //在obj.[[Prototype]]中还有一个‘b’属性,但它不会被访问到。这种情况称为“属性遮蔽”。 alert(obj.c); //输出4 c不是obj自身的属性,但是obj.[[prototype]]的属性 alert(obj.d); //输出undefined d既不是obj自身的属性,也不是obj.[[prototype]]的属性 //也不是obj.[[prototype]].[[prototype]](即null)的属性,原型链已到顶端,没有d属性,返回undefined