new构造函数
function People(name,age) { this.name=name; this.age=age; }这个函数是不是构造函数?他没有被调用,用new调用后就是构造函数,不被new调用就不是构造函数
function People(name,age) { this.name=name; this.age=age; } var obj = People("小明",12); alert(obj==null); alert(obj.age);
看到这个结果为null,我们就可以知道,这个函数不被调用,因为没有用new调用函数,所以声明的obj对象就是null
JS不是面向对象(oop)的,而是基于对象(bop)得到语言;
原型链prototype
每一个构造函数都有prototype属性,指向一个空对象
function People(name,age,sex) { this.name=name; this.age=age; this.sex=sex; } People.prototype={ "teacher":"考拉", "IQ":180, "salary":30000 } var xiaoming=new People(); var xiaohong=new People(); var xiaogang= new People(); alert(xiaoming.teacher); alert(xiaohong.teacher); alert(xiaogang.IQ);最后显示的结果是:考拉,考拉180;这说明了即使构造的子集中没有调取的属性,还可以顺着原型链找父类中的属性
//构造函数 function People(name,age,sex) { this.name=name; this.age=age; this.sex=sex; } //更改构造函数的prototype: People.prototype=Math; var xiaoming= new People("小明",12,"男"); //小明身上虽然没有random属性,但是小明的_proto_身上有这个属性 //所以小明能够大点调用random属性; alert(xiaoming.random());