您的位置:首页 > Web前端 > JavaScript

JavaScript创建对象的几种方式

2016-05-03 18:38 555 查看
JavaScript创建对象的几种方式:

1、使用Object构造函数来创建一个对象。

//1、使用Object构造函数创建一个对象,下面代码创建了一个person对象,并用两种方式打印了Name的属性值。
function createObject()
{
var person = new Object();
person.name = "kevin";
person.age = 31;
alert(person.name);
alert(person["name"]);
}


2、使用对象字面量创建一个对象。

//2、使用对象字面量创建一个对象;不要奇怪person["5"],这里是合法的;另外使用这种加括号的方式字段之间是可以有空格的如person["my age"]。
function createObject2()
{
var person =
{
name: "kevin",
age: 31,
5: "Test",
"my sex": true
};
alert(person.name);
alert(person["5"]);
alert(person["my sex"]);
}


3、使用原型模式创建对象。

//3、使用原型模式创建对象。从下面的代码执行结果可以看到,两个实例的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、使用工厂模式创建对象,返回带有属性和方法的person对象

function createPerson(name, age,job)
{
var o = new Object();
o.name=name;
o.age=31;
o.sayName=function()
{
alert(this.name);
};
return o;
}
createPerson("kevin",31,"se").sayName();


推荐使用创建对象的方法

1、组合使用原型模式和构造函数创建对象。(这是使用最广泛、认同度最高的创建对象的方法)

function Student(name, age)
{
this.name = name;
this.age = age;
this.friends = ["tom", "lily"];
}
Student.prototype.sayFriends = function () {
alert(this.friends);
};

var stu1 = new Student("ck", 28);
var stu2 = new Student("sh", 27);
stu1.friends.push("lucy");
stu1.sayFriends();  //tom,lily,lucy
stu2.sayFriends();  //tom,lily


2、动态原型模式。(这个模式的好处在于看起来更像传统的面向对象编程,具有更好的封装性)

function Student(name, age)
{
//属性
this.name = name;
this.age = age;
this.friends = ["Jams", "Martin"];
//方法
if (typeof this.sayName != "function")
{
Student.prototype.sayName = function () {
alert(this.name);
};
Student.prototype.sayFriends = function () {
alert(this.friends);
};
}
}

var stu = new Student("ck", 23);
stu.sayName();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: