javascript对象与原型
一、javascript中的对象:
JS中的对象是通过函数来表示的。
二、创建对象
- 工厂模式:
function CreatePerson(age,name,job){ var person=new Object(); person.age=age; person.name=name; person.job=job; return person; } //调用 var person1=CreatePerson(23,'Tom','doctor');
- 构造函数:
function Person(age,name,job){ this.age=age; this.name=name; this.job=job; this.person; } //调用 var person1=new Person(23,'Tom','doctor');
任何函数主要通过new操作符来调用,那它就可以作为构造函数。而任何函数如果不通过new操作符调用,那就是普通函数。
//当做构造函数 var person1=new Person(23,'Jom','student'); person1.sayName(); //作为普通函数,被添加到window作用域中 Person(23,'Jom','student'); window.sayName(); //作为普通函数,在另一个对象的作用域中执行 var o=new Object(); Person.call(o,23,'Jom','student'); o.sayName();
- 原型模式:
创建的每个函数都有一个prototype属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法。
无论什么时候只要创建了一个函数,就会根据一组特定的规则为该函数创建一个prototype属性,这个属性指向函数的原型对象。在默认情况下,所有原型对象都会自动获得一个constructor属性,该属性指向prototype所在函数的指针,即构造函数。如Person.prototype.constructor就是Person。
person构造函数、person原型属性、person实例的关系:person.prototype指向原型对象,person.prototype.constructor又指回了Person。person实例都包含一个内部属性,该属性指向person.prototype;换句话说,他们与构造函数之间没有直接关系。
- 组合使用构造函数和原型模式:
function Person(name,age,job){ this.name=name; this.age=age; this.job=job; this.firends=['Tom','Jim']; } person.prototype={ constructor:Person, sayName:function(){ alert(this.name); } } var person1=new Person('Lucy',26,'student'); var person1=new Person('Lily',26,'student'); person1.friends.push('van'); alert(person1.firends);//'Tom','Jim',Van alert(person2.firends);//'Tom','Jim'
浙公网安备 33010602011771号