Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中定义OOP类?_Javascript_Oop - Fatal编程技术网

如何在JavaScript中定义OOP类?

如何在JavaScript中定义OOP类?,javascript,oop,Javascript,Oop,根据我的观察,我正在读的关于JavaScript的书指出JavaScript中存在OOP?我的意思是它没有解释如何定义一个类。有人能给我一个示例片段吗 谢谢JavaScript是而不是基于类的 基于原型的编程是一种风格 面向对象编程在计算机中的应用 哪些课程不存在,以及 行为重用(称为继承 在基于类的语言中)执行 通过克隆现有的 用作原型的对象。这 模型也可以称为无类, 面向原型还是基于实例 编程。代表团是 支持 基于原型的编程 下面的代码片段可以帮助您开始使用JavaScript的无类、基于实

根据我的观察,我正在读的关于JavaScript的书指出JavaScript中存在OOP?我的意思是它没有解释如何定义一个类。有人能给我一个示例片段吗

谢谢

JavaScript是而不是基于类的

基于原型的编程是一种风格 面向对象编程在计算机中的应用 哪些课程不存在,以及 行为重用(称为继承 在基于类的语言中)执行 通过克隆现有的 用作原型的对象。这 模型也可以称为无类, 面向原型还是基于实例 编程。代表团是 支持 基于原型的编程


下面的代码片段可以帮助您开始使用JavaScript的无类、基于实例的对象:

function getArea() {  
   return (this.radius * this.radius * 3.14);  
}  

function getCircumference() {  
   var diameter = this.radius * 2;  
   var circumference = diameter * 3.14;  
   return circumference;  
}

function Circle(radius) {  
   this.radius = radius;  
   this.getArea = getArea;  
   this.getCircumference = getCircumference;  
}

var bigCircle = new Circle(100);  
var smallCircle = new Circle(2);

alert(bigCircle.getArea());            // displays 31400  
alert(bigCircle.getCircumference());   // displays 618  
alert(smallCircle.getArea());          // displays 12.56  
alert(smallCircle.getCircumference()); // displays 12.56

示例:javascript中的任何函数都可以用于创建对象:

例如:

function MyPoint(x, y) {
    this.x = x;
    this.y = y;
    this.distanceTo = getDistance;
}

function getDistance(p) {
  var dx = this.x-p.x;
  var dy = this.y-p.y;
  return Math.sqrt(dx*dx + dy*dy);
}

var p0 = new MyPoint(1, 2);
var p1 = new MyPoint(2, 3);

window.alert('The distance is ' + p0.distanceTo(p1));

在JavaScript中,一切都是一个对象。因此,即使是函数也是一个对象。所以在js中(小于<版本2),函数生成类(它们本身就是第一类对象)。去吧,为了更好地理解

这里有两种不同的方法

if (typeof FFX == "undefined") {
    FFX = {};
}

//Static class
FFX.Util = ({
     return {
      method:function(){
      }
})();

FFX.Util.method(); 



//Instance class
FFX.Util2 = ({
    // private method
    var methodA=function(){
      alert("Hello");
    };
     return {
      method:function(){
      //Call private method
        methodA();
      }
});
var x= new FFX.Util();
x.method(); 
另一种方式

function MyClass(){
}

/* privileged functions */
MyClass.prototype.hello = function(){
    alert("Hello");
}   

此外,您还可以查看jquery、prototype等如何处理类,并查看它们是否适合您的需要。

在JavaScript中没有一种标准的OOP方法。每个人使用稍有不同的类/实例系统,大多数书籍都回避了这个问题。有关如何在JS中使用OO的讨论,请参阅,并选择您最喜欢的方法。

我建议您对如何使用JS的原型继承以及如何在JS中模拟经典OO继承进行简明、准确的解释


哪本书,哪种代码,为什么,什么,接受一些answers@AndyE:一周内有六个不被接受的问题也没那么糟糕。@Gumbo:是的,但一周内有六个问题,然后就开始了。我认为最好是促使某人尽早标记一些答案:-)@sasori:如果您之前问题的任何答案都令人满意和/或解决了您的问题,您可能希望将其标记为“已接受”。这被认为是良好的礼仪,并将鼓励更多的用户回答您未来的任何问题。在任何情况下,欢迎使用堆栈溢出。@sasori:请阅读FAQ()。您的示例根本不使用基于原型的继承。这当然是进行继承的有效方法,但不要声称这是基于原型的继承。@Keith:更新了我的答案:使用更准确的术语。。。尽管如此,我认为上面的内容仍然可以被视为基于原型的编程的一个例子:在基于原型的系统中,有两种构建新对象的方法,一种是通过克隆现有对象,另一种是通过ex-nihilo(“从无到有”)对象创建。来源:@DanielVassallo感谢您提供了这个示例,让Java变得简单:)是的。道格拉斯·克罗克福德(Douglas Crockford)的网站(www.Crockford.com)上也有很好的解释。你可能会发现他做的视频也很有用——这里有一些。但您仍然可以模拟基于类的继承的各个方面,并使其感觉像常规类。