javascript——构造方法创建对象

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>js01_hello</title>
	<meta name="author" content="Administrator" />
	<script type="text/javascript">
	/**
	 * 通过构造函数的方式创建,和基于工厂的创建类似
	 * 最大的区别就是函数的名称就是类的名称,按照java的约定,第一个
	 * 字母大写。使用构造函数创建时,在函数内部是通过this关键字来
	 * 完成属性的定义
	 */
	function Person(name,age) {
		this.name = name;
		this.age = age;
		//以下方式带来的问题是所有的对象都会为该行为分配空间
		// this.say = function() {
			// alert(this.name+","+this.age);
		// }
		this.say = say;
	}
	/**
	 * 将行为设置为全局的行为,如果将所有的方法都设计为全局函数的时候
	 * 这个函数就可以被window调用,此时就破坏对象的封装性
	 * 而且如果某个对象有大 量的方法,就会导致整个代码中充斥着大量的全局函数
	 * 这样将不利于开发
	 */
	function say() {
		alert(this.name+","+this.age);
	}
	/*
	 * 通过new Person来创建对象
	 */
	var p1 = new Person("Leon",22);
	var p2 = new Person("Ada",32);
	p1.say(); p2.say();
	/**
	 * 使用构造函数的方式可以通过以下方式来检测
	 * 对象的类型
	 */
	alert(p1 instanceof Person);
	/**
	 * 使用构造函数创建所带来的第一个问题就是每一个对象中
	 * 都会存在一个方法的拷贝,如果对象的行为很多的话
	 * 空间的占用率就会大大增加
	 * 可以将函数放到全局变量中定义,这样可以让类中的行为指向
	 * 同一个函数
	 */
	alert(p1.say==p2.say);
	</script>
</head>
<body>
</body>
</html>

  

posted on 2015-02-09 14:36  aicpcode  阅读(161)  评论(0编辑  收藏  举报

导航