码迷,mamicode.com
首页 > Web开发 > 详细

js高程笔记--创建对象

时间:2016-05-13 11:54:55      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

1、工厂模式

ex: 

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

var person1 = createPerson("Nicholas", 29, "Software Engineer");
var person2 = createPerson("Greg", 27, "Doctor");

通过返回一个内部对象来创建对象;

 

2、构造函数模式

ex:

function Person(name, age, job) {
	this.name = name; 
	this.age = age;
	this.job = job;
	this.sayName = function() {
		alert(this.name);
	};
}

var person1 = new Person("Nicholas" , 29, "Software Engineer");
var person2 = new Person("Greg", 27, "Doctor");

作为一个构造函数,创建一个新对象,将构造函数的作用域赋给新对象,执行构造函数中的代码,添加属性和方法,返回新对象。

这样坏处在于同一个方法函数做的同一件事情需要产生多个不同或不相等的函数。

 

3、原型模式

function Person() {
}

Person.prototype.name = "Nicholas";
Person.prototype.age = 29;
Person.prototype.job = "Software Engineer";
Person.prototype.sayName = function() {
	alert(this.name);
};

var person1 = new Person();
person1.sayName();

var person2 = new Person();
person2.sayName();

alert(person1.sayName == person2.sayName);  /true

所有实例共享原型的属性和方法

 

原型对象理解:

prototype的constructor属性指向新的构建函数

构建函数的prototype属性指向原型Prototype

new的新对象的[[Prototype]]属性指向原型Prototype

 

Person.prototype.isPrototypeOf(person1)   //true

Person.prototype.isPrototypeOf(person2)   //true

 

Object.getPrototypeOf(person1) == Person.prototype

Object.getPrototypeOf(person1).name   //access

这里的访问先访问对象有否此属性,若无,再访问原型有否该属性,再访问更上层的原型,诸如此类。

 

hasOwnProperty 可以检测一个属性是存在于实例中,还是存在于原型中,这个方法只在给定属性存在于对象实例中的时候,才会返回true

js高程笔记--创建对象

标签:

原文地址:http://www.cnblogs.com/dereklaw/p/5486855.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!