Nis*_*ant -4 javascript oop function
JavaScript不是面向类的编程语言.但是,有一些方法可以在JavaScript中创建对象实例.我已经读过一个这样的方法是一个函数构造函数方法来创建"实例",一种方法是这样的:
function Circle(radius) {
this.radius = radius;
Circle.prototype.area = function () {
return this.radius * this.radius * 3.14
}
}
smallWheel = new Circle(2); bigWheel = new Circle(5);
smallWheel.area == bigWheel.area => True;
Run Code Online (Sandbox Code Playgroud)
是不是有在一个低效率Circle.prototype.area再次复位到相同的功能"串" function () { return this.radius * this.radius * 3.14
当你调用Circle(2)和Circle(5)?
虽然它设置了相同的值,但效率不高吗?想象一下,有数百个实例......这可能效率低下?
根据我的理解,正常的OO语言不需要为一个实例反复编译函数,因为它是共享的.任何人都可以澄清吗?
编辑:这是我的疏忽,我错过了函数体后面的下一行'}'.然而,下面的答案特别有用,特别是它应该在外面定义的部分,这个区域是低效的.
我认为你在JavaScript中定义一个对象的两种方法之间感到困惑:
function Circle(radius) {
this.radius = radius;
this.area = function () {
return this.radius * this.radius * 3.14
}
}
Run Code Online (Sandbox Code Playgroud)
...... vs:
function Circle(radius) {
this.radius = radius;
}
Circle.prototype.area = function () {
return this.radius * this.radius * 3.14
}
Run Code Online (Sandbox Code Playgroud)
两者都可以以完全相同的方式被调用和使用;
var x = new Circle(5);
x.area();
Run Code Online (Sandbox Code Playgroud)
但是,在第一个例子中,是的,你是对的; 该函数实例将存在于每个实例上Circle,如果您有许多实例,则效率低下.
但是,对于第二个示例,该area函数存在一次.
使用原型链定义方法与定义上的区别this,直接穿过了很多更详细的JavaScript的"原型"与"本"的使用?; 我强烈建议阅读它.