javascript创建对象的几种方式

javascript是一种“基于prototype的面向对象语言“,与java有非常大的区别,无法通过类来创建对象。那么,既然是面象对象的,如何来创建对象呢?

一、通过”字面量“方式创建

方法:将成员信息写到{}中,并赋值给一个变量,此时这个变量就是一个对象。

例如:

var person = (name:'dongjc', work:function() {console.log('write coding')});

如果{}中为空,则将创建一个空对象:

var person = {} //创建空对象

代码:

<script type="text/javascript">
var person = {
    name: "dongjc",
    age: 32,
    Introduce: function () { alert("My name is " + this.name + ".I'm " + this.age); }
};
person.Introduce();  
</script>
我们还可以给对象丰富成员信息。

● 对象.成员名称 = 值;

● 对象[成员名称] = 值;

也可以获取对象的成员信息。

● 对象.成员名称;

● 对象[成员名称];

<script type="text/javascript">
    var person = {
    name: "dongjc",
    age: 32,
    Introduce: function () { alert("My name is " + this.name + ".I'm " + this.age); }
};
person.worker = 'coding'; //丰富成员信息
</script>

二、通过”构造函数“方式创建

方法:

var obj = new 函数名();

这与通过类创建对象有本质的区别。通过该方法创建对象时,会自动执行该函数。这点类似于php通过创建对像时,会自动调用构造函数,因此该方法称为通过"构造函数“方式创建对象。

<script type="text/javascript">
function Person() {
    this.name = "dongjc";    //通过this关键字设置默认成员
    var worker = 'coding';    //没有this关键字,对象创建后,该变量为非成员
    this.age = 32;
    this.Introduce = function () {
        alert("My name is " + this.name + ".I'm " + this.age);
    };
    alert("My name is " + this.name + ".I'm " + this.age);
};
var person = new Person();
person.Introduce();
</script>

此代码一共会两次跳出对话框,原因在于创建对象是自动执行了该函数。

注意:this关键字的使用。这里的this与php中话法意思类似,指调用该函数的对象,这里指的是person。

三、通过object方式创建

方法:先通过object构造器new一个对象,再往里丰富成员信息。

var obj = new Object();

代码:

<script type="text/javascript">
var person = new Object();
person.name = "dongjc";
person.age = 32;
person.Introduce = function () {
        alert("My name is " + this.name + ".I'm " + this.age);
    };
person.Introduce();
</script>

四、使用工厂模式创建对象

这种方式是使用一个函数来创建对象,减少重复代码,解决了前面三种方式的代码冗余的问题,但是方法不能共享的问题还是存在。

<script>
	'use strict';

	// 使用工厂模式创建对象
	// 定义一个工厂方法
	function createObject(name) {
		var o = new Object();
		o.name = name;
		o.sayName = function() {
			alert(this.name);
		};
		return o;
	}

	var o1 = createObject('zhang');
	var o2 = createObject('li');

	//缺点:调用的还是不同的方法
	//优点:解决了前面的代码重复的问题
	alert(o1.sayName === o2.sayName); //false
</script>

五、通过原型模式创建对象

每个方法中都有一个原型(prototype),每个原型都有一个构造器(constructor),构造器又指向这个方法。

举个例子:

function Animal(){}
alert(Animal.prototype.constructor==Animal);//true

原型创建对象:

<script>
	'use strict';

	/*
	 *  原型模式创建对象
	 */
	function Animal() {}

	Animal.prototype.name = 'animal';
	Animal.prototype.sayName = function() {
		alert(this.name);
	};

	var a1 = new Animal();
	var a2 = new Animal();

	a1.sayName();

	alert(a1.sayName === a2.sayName); //true
	alert(Animal.prototype.constructor); //function Animal(){}
	alert(Animal.prototype.constructor == Animal); //true
</script>

通过原型创建对象,把属性和方法绑定到prototype上,通过这种方式创建对象,方法是共享的,每个对象调用的是同一个方法。

以上就是javascript创建对象的几种方式的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » JavaScript 答疑