转载记录学习~
"prototype对象",所有实例对象需要共享的属性和方法,都放在这个对象里面;那些不需要共享的属性和方法,就放在构造函数里面。
实例对象一旦创建,将自动引用prototype对象的属性和方法。也就是说,实例对象的属性和方法,分成两种,一种是本地的,另一种是引用的。
使用工厂模式:
//工厂模式:因为使用用一个接口创建很多对象会产生大量的重复代码,为了解决这个问题,人们就开始使用工厂模式: function Person(hairs,face, eye) { var o = new Object(); o.hairs = hairs; o.face = face; o.eye = eye; o.say = function(){ console.log("say someting to me!"); }; return o; }; //我们通过 Person(0,1,2)就可以创建一个包含特定信息的Person对象, 以后要生成对象直接执行Person然后给他传参数就好了; //比如我们要生成10个Person, 很方便很快; var c = 10; while( c-- ) { console.log(Person(c,c,c)) };
构造函数模式:
function Person(hairs, face, eye) { this.hairs = hairs; this.face = face; this.eye = eye; }; //同样, 我们再生成10个小朋友 var c = 10; while( c-- ) { console.log( new Person(c,c,c) ); };
//知识点1: 工厂模式和构造函数模式区别:
/*
* 没有显式地创建对象
* 直接把属性和方法赋值给了this
* 没有return语句
* 构造函数的前面有一个new;
* */
// 知识点2:
/*
* 通过new的构造函数会经过四个阶段:
* 1:创建一个新对象;
* 2:把this赋值给这个新对象
* 3:执行构造函数中的代码
* 4:返回新对象
* */
constructor是默认指向创建当前对象的构造函数, 但是这里面有一些坑要注意, 比如你的原型prototype被改了, 实例的constructor就变了
实例上的__proto__就是指向原型上的prototype
每一个函数新建的时候都有一个默认的prototype, prototype这个对象上面默认有一个指向自己的constructor;
prototype和__proto__的区别:__proto__是实例和Person.prototype之间的关系,而constructor是实例和Person之间的关系