这里有新鲜出炉的 Javascript 教程,程序狗速度看过来!
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
下面小编就为大家带来一篇 javascript 将共享属性迁移到原型中去的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
当我们用一个构造函数创建对象时,其属性就会被添加到 this 中去。并且被添加到 this 中的属性实际上不会随着实体发生改变,这时,我们这种做法显得会很没有效率。例如:
- function her() {
- this.name = 'Anna';
- }
这意味着每次我们 new her() 创建一个实例对象的时候都会生成一个全新的 name 属性,并在内存中拥有属于该属性自己的存储空间。而事实上,我们可以将 name 属性添加到原型上去,这样一来所有实例都可以共享这个 name 属性了:
- function her() {}
- her.prototype.name = 'Anna';
这样一来,我们再用 new her() 创建对象的时候,name 属性就不再是新对象的私有属性了,而是被添加到该对象的原型中去了。虽然这种做法会很有效率,但这也是针对实例对象中的不可变属性而言的,这是一定的不然的话改一下这个属性,所有被创建的新对象的这个属性都会被改变,这可不是我们想要的啊~~~。对象的公有属性尤其适合这种方法。
下面,我们来改进以前的一个例子:
- function her() {};
- her.prototype.name = 'Anna';
- her.prototype.toString = function() {
- return this.name;
- }
- function his() {};
- his.prototype = new her();
- his.prototype.constructor = his;
- his.prototype.sex = 'women';
如您所见,通常我们在进行原型对象扩展之前,我们现完成了相关继承工作的构建,否则 his.prototype 中后续新的属性方法有可能会抹掉继承来的东西。
- function child(f, m) {
- this.eat = f;
- this.don = m;
- }
- child.prototype = new his();
- child.prototype.constructor = child;
- child.prototype.name = 'Jok';
- child.prototype.fun = function() {
- return this.eat + this.don
- }
如您所见,实际上调用 toString() 这个方法的区别仅仅在于幕后的少量操作。主要区别也就是属性,方法的查找工作将更多地发生在 her.prototype 中。
以上这篇 javascript 将共享属性迁移到原型中去的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持 phperz。
来源: http://www.phperz.com/article/17/0525/332221.html