最近我开始学习Javascript,因为我来自Java世界.我得到了这本名为JavaScript The Definitive guide的书..我现在对Prototypes和Inheritance有点困惑.我想知道将函数设置为对象属性和函数原型之间有什么区别.从书中的例子:
function Rectangle(w, h) {
this.width = w;
this.height = h;
this.area = function( ) { return this.width * this.height; }
}
Run Code Online (Sandbox Code Playgroud)
使用这个新版本的构造函数,您可以编写如下代码:
// How big is a sheet of U.S. Letter paper in square inches?
var r = new Rectangle(8.5, 11);
var a = r.area( );
Run Code Online (Sandbox Code Playgroud)
此解决方案效果更好,但仍然不是最佳的(为什么).创建的每个矩形都有三个属性(是的,那么什么?).每个矩形的宽度和高度属性可能不同,但每个Rectangle对象的区域总是引用相同的函数(当然,有人可能会更改它,但您通常希望对象的方法保持不变).对于打算由同一个类的所有对象共享的方法使用常规属性是低效的(为什么问题是什么?)(即,使用相同构造函数创建的所有对象).
Rectangle对象始终引用相同的函数
那是不对的.每个rectangle对象都有自己的area属性副本.
如果您使用基于原型的定义,那么您将在所有实例中共享一个函数.
因此从性能和内存消耗的角度来看,最好将其定义为
Rectangle.prototype.area = function() {
return this.width * this.height;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |