繁体   English   中英

你如何用JavaScript制作课程?

[英]How do you make classes in JavaScript?

你们是如何用JavaScript制作“课程”的?

我在用:

function classFoo()
{
   var classLevelVariable = 0;

   this.classFunction = function()
   {
      alert("The classFunction has been called.");
      classFunction2(); //Crash.  classFunction2 is "undefined."  
   }

   this.classFunction2 = function()
   {
      alert("classFunction2 called.");
   }
}

我从来没有能够让施工人员工作。 试着

this.New = function(arguments)

哪个工作过一次,但不是在第二个班级。 所以,我现在已经完全放弃了这些,使用我自己的“初始化”函数作为构造函数。

它工作一次但不是两次的奇怪使我觉得两个类之间的印刷错误...但我认为在19年的编码中,可能不是它。

我正在使用Chrome的调试器,除了第二个函数被调用时,我没有收到任何错误。

Javascript不使用基于类的继承 因此,您不能在Javascript中创建类,除非使用IMHO笨拙且复杂的变通方法来模拟它们。

Javascript是一种原型语言。 使用new关键字基于构造函数对象的prototype属性创建一个新对象。

您可以在此处了解如何使用原型继承来基于原型对象实例化新对象: http//javascript.crockford.com/prototypal.html

我觉得你原来的咆哮(见问题的修订历史)值得回应。 在我看来,这非常违背编程和计算机科学的精神,仅仅因为你无法实现它而宣称一种语言被破坏

请原谅我,当我说我很惊讶他们可以给那些具有这种范式无知的人提供CS学位时,我会得罪你。 当我上学时,大约5年前,我用6种不同的语言完成了我的作业:MIPS,Verilog,Scheme,Java,C / C ++和Python。 我们使用了许多范例,包括功能和OOP,但也包括其他风格。 如果您没有接触到这些不同的观点,其中没有一个是新的,那么您的教育就不完整。

您是否认为您认为规范OOP 仅仅是OOP原则的一个表述 在Javascript对象中实例化“原型”,它与类不同。 当您希望它像基于类的OOP语言一样工作时,它将无法满足您的期望。 Java和C ++不是OOP的黄金标准,OOP也不是所有编程的全部。

当人们考虑过去3 - 5年内用Javascript编写的令人惊叹的应用程序时,一个人可以做出这样的声明真是太神奇了:

人们会认为我们会在过去的六十年里将最好的编码实践应用到其中。 不,当然不。 我们有什么? 函数内部的函数......类的一些奇怪的混蛋。 完全没有一致性......

要说这一点,尽管杰出的Javascript开发团队取得了辉煌的成就,但语言被打破了,因为很难理解它是,令人惊讶的。

请注意,您可能目前没有理解它所必需的视角,而不是语言存在缺陷。


PS,你提到你“使用JavaScript来避免闪存!” 由于Javascript和Actionscript都实现了相同的规范:ECMAScript,因此您似乎有一个非常糟糕的策略来确定事实。

JavaScript是一种基于原型的编程语言。 类的概念不存在或类的概念与对象相同。 它与Java编程语言完全不同。 不要被他们的名字所迷惑,这些相似之处就在那里。

我回来时问了这个问题 我得到了一个答案,其中包含了John Resig对这些演示幻灯片的一个很好的链接。 看一下,看看它是否有助于理解JavaScript和原型链。

是一篇关于sitepoint.com的关于JavaScript中面向对象编程的好文章。

这个javascriptkit.com上更直接。

您可以使用函数创建一个对象集,其属性和函数如下:

person = new Object()
person.name = "Tim Scarfe"
person.height = "6Ft"

person.run = function() {
    this.state = "running"
    this.speed = "4ms^-1"
}

或使用构造函数:

function person(name,height,speed){
    this.name = name;
    this.height = height;
    this.speed = speed;
}

var p1=new person('tom', '6ft','15kmph');

alert(p1.height);

或者您可以使用原型来扩展对象:

person.prototype.sayHello = function(){alert("Hi, I'm " + name;}

var p2 = new person('sam', '5.9ft', '12kmph');
p2.sayHello();//alert-> Hi, I'm sam

链接页面上有更详细的信息。

JavaScript是一种原型语言 ,因此情况略有不同。

这是一个代码片段来解释:

(function(){ // create an isolated scope
    // My Object we created directly
    var myObject = {
        a: function(x,y) {
            console.log('a');
        },
        b: function(x,y) {
            console.log('b');
            this.a(x,y);
        }
    };
})();

(function(){ // create an isolated scope

    // Create a Object by using a Class + Constructor
    var myClass = function(x,y) {
        console.log('myClass: constructor');
        this.b(x,y);
    };
    myClass.prototype = {
        a: function(x,y) {
            console.log('myClass: a');
        },
        b: function(x,y) {
            console.log('myClass: b');
            this.a(x,y);
        }
    };

    // Define a function that should never inherit
    myClass.c = function(x,y) {
        console.log('myClass: c');
        this.a(x,y);
    };

    // Create Object from Class
    var myObject = new myClass();
    // Will output:
    // myClass: constructor
    // myClass: b
    // myClass: a

    // Define a function that should never inherit
    myObject.d = function(x,y) {
        console.log('myObject: d');
        this.a(x,y);
    };

    // Test the world is roung
    console.log(typeof myClass.c, 'should be undefined...');
    console.log(typeof myClass.d, 'should be function...');
})();

(function(){ // create an isolated scope
    // If you are using a framework like jQuery, you can obtain inheritance like so

    // Create a Object by using a Class + Constructor
    var myClass = function(x,y) {
        console.log('myClass: constructor');
        this.b(x,y);
    };
    myClass.prototype = {
        a: function(x,y) {
            console.log('myClass: a');
        },
        b: function(x,y) {
            console.log('myClass: b');
            this.a(x,y);
        }
    };

    // Create new Class that inherits
    var myOtherClass = function(x,y) {
        console.log('myOtherClass: constructor');
        this.b(x,y);
    };
    $.extend(myOtherClass.prototype, myClass.prototype, {
        b: function(x,y) {
            console.log('myOtherClass: b');
            this.a(x,y);
        }
    });

    // Create Object from Class
    var myOtherObject = new myOtherClass();
    // Will output:
    // myOtherClass: constructor
    // myOtherClass: b
    // myClass: a
})();

(function(){ // create an isolated scope
    // Prototypes are useful for extending existing classes for the future
    // Such that you can add methods and variables to say the String class
    // To obtain more functionality
    String.prototype.alert = function(){
        alert(this);
    };
    "Hello, this will be alerted.".alert();
    // Will alert:
    // Hello, this will be alerted.
})();

有图书馆可以帮助解决这个问题,例如:

通过使用Prototype javascript框架。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM