使用工厂方法和构造函数创建对象

1. 使用工厂方法创建对象:通过该方法可以大批量的创建对象。

function createPerson(name) {
	// 创建一个新对象
	var obj = new Object();
	// 向对象中添加属性
	obj.name = name
	obj.sayname = function() {
		alert(this.name);
	}
	// 返回新对象
	return obj;
}

var obj2 = createPerson("孙悟空");
console.log(obj2);

局限:使用工厂方法创建的对象,使用构造函数都是object,所以创建的对象都是object这个类型,导致我们无法区分多种不同类型的对象。

2. 使用构造函数,专门创建Person对象。

  1. 构造函数就是一个普通函数,创建方式和普通函数没有区别。不同的是构造函数习惯上首字母大写。
  2. 构造函数和普通函数的区域就是调用方式不同。普通函数是直接调用,构造函数需要使用new关键字调用。
  3. 构造函数执行流程:
    (1)立刻创建一个新的对象。
    (2)将新建对象设置为函数中的this, 在函数中可以使用this来引用新建的对象。
    (3)逐行执行函数中代码。
    (4)将新建对象作为返回值返回。
function Person(name) {
	this.name = name
	this.sayName = function() {
		alert(this.name)
	}
}
function Dog(name) {
	
}
var per = new Person(name);
var dog= new Dog();
console.log(per)  
console.log(dog)

执行以上代码后类型为Person、Dog

  1. 使用同一个构造函数创建的对象,我们称为一类对象,也将一个构造函数称为一个类。我们将通过一个构造函数创建的对象,称为是该类的实例。Person类、Dog类。
  2. 使用instanceof可以检查一个对象是否是一个类的实例。语法:对象 instanceof 构造函数,如果是返回true否则是false。
console.log(per instanceof Person) // true
  1. 所有对象都是Object后代,所以任何对象和Object和instanceof检查是都返回true。
console.log(per instanceof Object) // true

this:
当以函数的形式调用,this是window。
当以方法的形式调用,谁调用方法this就是谁。
当以构造函数的形式调用,this就是新创建的那个对象。

发布了27 篇原创文章 · 获赞 4 · 访问量 2825

猜你喜欢

转载自blog.csdn.net/qq_39083496/article/details/102768550