工厂模式
function createPerson(name, age) { let o = new Object(); o.name = name o.age = age o.say = function() { console.log("name", this.name, "age", this.age); } return o } let object1 = createPerson('n1', 'a1'); let object2 = createPerson('n2', 'a2'); object1.say(); object2.say();
调用这个工厂函数,传递name和age每次都会返回一个包含两个属性和一个方法的对象
构造函数
function Person(name, age) { this.name = name; this.age = age; this.say = function () { console.log("name", this.name, "age", this.age); } } let p1 = new Person('n1', 'a1'); let p2 = new Person('n2', 'a2'); p1.say(); p2.say();
可以看到构造函数之中其实没有return返回一个对象的。但是这些都是使用new操作符后自动有些操作。
(1)创建一个新对象
(2)这个新对象会绑定到函数调用的this
(3)对象返回
原型模式
function Person() { } Person.prototype.name = 'name' Person.prototype.age = 'age' Person.prototype.say = function () { console.log(this.name, this.age); } let p = new Person() p.say();
使用原型的好处是可以让所有的实例对象共享它所包含的属性和方法,不必在构造函数中定义对象实例信息。