你们是如何用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和原型链.