JS创建对象的几种方式
/*第一种方法
使用Object构造函数来创建一个对象
*/
// var person = new Object();
// person.name="kevin";
// person.age=31;
// alert(person.name);
// alert(person["name"]);
/*第二种方法
使用对象字面量创建一个对象
*/
// var person =
// {
// name:"Kevin",
// age:31,
// 5:"Test"
// };
// alert(person.name);
// alert(person["5"]);
/*第三种方法
使用自定义构造函数模式创建对象;这里注意命名规范,作为构造函数的函数首字母要大写,以区别其它函数。这种方式有个缺陷是sayName这个方法,它的每个实例都是指向不同的函数实例,而不是同一个。
*/
// function Person(name,age,job)
// {
// this.name=name;
// this.age=age;
// this.job=job;
// this.sayName=function()
// {
// alert(this.name);
// };
// }
// var person = new Person("kevin",31,"SE");
// person.sayName();
// var person1 = new Person("zhangsan",30,"SE");
// person1.sayName();
function Person(){
this.name='zhangsn';
this.age=20;
this.friends=["Jams","Martin"];
this.setName=function(name){
this.name=name;
};
this.getName=function(){
return this.name;
};
this.sayFriends=function(){
console.log(this.friends);
}
}
var p1=new Person(); /*它的每个实例都是指向不同的函数实例,而不是同一个。*/
p1.friends.push("Joe");
p1.sayFriends();//Jams,Martin,Joe
var p2 = new Person();
p2.sayFriends();//James,Martin
/*第四种方法
使用原型模式创建对象;解决了方法4中提到的缺陷,使不同的对象的函数(如sayFriends)指向了同一个函数。但它本身也有缺陷,就是实例共享了引用类型friends,从下面的代码执行结果可以看到,两个实例的friends的值是一样的,这可能不是我们所期望的。
*/
// function Person()
// {
// }
// Person.prototype = {//多个实例共享
// constructor : Person,
// name:"kevin",
// age:31,
// job:"SE",
// friends:["Jams","Martin"],
// sayFriends:function()
// {
// alert(this.friends);
// }
// };
// var person1 = new Person();
// person1.friends.push("Joe");
// person1.sayFriends();//Jams,Martin,Joe
// var person2 = new Person();
// person2.sayFriends();//James,Martin,Joe
/*第五种
组合使用原型模式和构造函数创建对象,解决了方法4中提到的缺陷,而且这也是使用最广泛、认同度最高的创建对象的方法。
*/
// function Person(name,age,job)
// {
// this.name=name;
// this.age=age;
// this.job=job;
// this.friends=["Jams","Martin"]; //每个实例都是指向不同的函数实例
// }
// Person.prototype.sayFriends=function() //多个实例共享
// {
// alert(this.friends);
// };
// var person1 = new Person("kevin",31,"SE");
// var person2 = new Person("Tom",30,"SE");
// person1.friends.push("Joe");
// person1.sayFriends();//Jams,Martin,Joe
// person2.sayFriends();//Jams,Martin