创建一个对象,都有这么多种方式。
有没有感觉,javascript真的很灵活呢。
每次实例化都要创建一个对象的拷贝,方法函数也跟着拷贝了。 如果偏要共享方法函数,那这个方法就不能实现了呢。
Person 作为构造函数。
通过new,我们构造出一个实例,实例的原型的构造器指针指向Person,然后将Person上的属性复制到person1中。返回this(this已指向person1)。
什么意思呢?属性都被复制了一份?yes。没错。
所以,
构造函数模式也存在同样的问题:
每次实例化都要创i按一个对象的拷贝,方法函数也跟着拷贝了。
如果偏要共享方法函数,那这个方法就不能实现了。
原型模式在构造模式的基础上,通过原型链,加入了方法共享。
非常不错的一种办法。
我们记得c++语言的类,我们可以初始化,就是某些函数,在类的初始化的时候执行一次,之后就不执行了。
js的类可以做到吗?
function Person(name,age,tel){ this.name = name; this.age = age; this.tel = tel; if(typeof this.sayName != "function"){ alert('初始化只执行一次哦'); Person.prototype.sayName = function(){ console.log(this.name); } } } var person1 = new Person('章鱼小丸子','21','110'); person1.sayName();//弹出alert框 person1.sayName();//不弹alert框只有在sayName不存在的时候,才会弹出alert框,并创建sayName函数。
那么我们第一次去执行person1.sayName();的时候,就可以理解为一个初始化,弹出alert。
后面再去执行多少遍person1.sayName();,都不会触发alert了。