草庐IT

javascript - JS 和 OOP : abuse of `that = this` pattern

我对JS世界比较陌生。我习惯用QT编写UI(构建UI的好工具!)。使用QT,我正在为每个元素创建一个类:如果我有一个包含一些元素的表,我有一个用于每个元素的类和一个用于表的类(可能也用于行)。每个类都包含数据和操作其“DOM”的方法。现在在html中,我正在使用一些在div上包含空骨架的ejs文件,我正在编写一个类以通过jquery对其进行操作。例如:用户列表.ejs:functionUsersList(path){this.path=path;$('#userList>tbody').empty();this.loadAjax();}UsersList.prototype.loadA

javascript - 查找 Javascript 应用程序中扩展基类的所有类

我有这样的代码classAnimal{}classDogextendsAnimal{}classCatextendsAnimal{}classDonkeyextendsAnimal{}我想查看应用程序宇宙中的所有类,当我找到一个从Animal派生的类时,我想创建一个该类型的新对象并将其添加到列表中。这允许我添加功能而无需更新事物列表。所以我可以避免以下情况:varanimals=[];animals.push(newDog());animals.push(newCat());animals.push(newDonkey());PS:我不想向我的类添加额外的功能或显式调用它们。

javascript - 在 Javascript ES6 的子类中扩展父类方法

我想在父类中扩展子类的特定方法的功能。我还在习惯ES6中的OOP,所以我不确定这是否可行或违反规则。我正在寻找这样的东西:classParent{constructor(elem){this.elem=elem;elem.addEventListener((e)=>{this.doSomething(e);});}doSomething(e){console.log('doingsomething',e);}}classChildextendsParent{constructor(elem){//setsupthis.elem,eventlistener,andinitialdefin

javascript - 为什么 instanceof 关键字不适用于 Backbone js 模型?

我正在构建一个涉及继承和使用instanceofjavascript关键字的BackboneJS应用程序。我有以下代码:app.Sport=Backbone.Model.extend({defaults:{id:0,title:'Running'}});在代码的后面,我通过键入来实例化一个新的Sport:varnewSport=newapp.Sport();我可以毫无问题地操作这个新创建的实例。但是,因为有一个但是,instanceof关键字在询问我的实例类型时总是返回false:console.log('isnewSportaSportinstance?'+newSportinsta

javascript - 如何继承静态方法?

我有课functionMan(){...}Man.drinkBeer=function(){...}我需要从Man继承SuperMan。而且我仍然希望我的超人能够喝点啤酒。我该怎么做? 最佳答案 Object.setPrototypeOf(SuperMan,Man);这会将派生函数的内部__proto__属性设置为基函数。因此,派生函数将继承基函数的所有属性。请注意,这会影响函数本身,而不是它们的原型(prototype)。是的,这很困惑。没有现有的浏览器支持setPrototypeOf();相反,您可以使用非标准(但有效)的替代方

oop - 是否可以隐藏 Javascript 对象的原型(prototype)!这背后的奥秘是什么?

我正在使用openui5。有一个UI控件Button的构造函数,看不到Button的prototype属性,但是在浏览器控制台中执行时出现了同样的东西!sap.m.Button.prototype.Move=function(){console.log('Move');}varoButton=newsap.m.Button({text:"Hello"});oButton.Move();//throwsundefinedfunction!在控制台中执行浏览器时相同的代码,它有效!jsbin-->http://jsbin.com/tepum/1/edit 最佳答

javascript - 在 javascript 中的对象扩充期间什么时候应该使用 "prototype"?

我对javascript中的“原型(prototype)”概念感到困惑。当我定义一个对象时,以下两种方法似乎都有效:myObject={};myObject.prototype.method1=function(){...};myObject.prototype.method2=function(){...};myObject.prototype.method3=function(){...};和...myObject={};myObject.method1=function(){...};myObject.method2=function(){...};myObject.method

Javascript 文字与函数 oop

使用这些的最佳实践是什么?varx={a:'a',eat:function(){},...}对比varx=function(){vara='a';this.eat=function(){}}以上需要启动:newx();谁能帮我解释一下两者的重要性,在oop社区中哪个是首选?任何智慧的话都会有所帮助。我也做了一些研究,但没有任何结果。非常感谢。 最佳答案 基本区别在于第一个版本公开了变量“a”,而第二个版本隐藏了它。因此,除非您希望或需要客户端代码访问x.a,否则首选第二个版本。第三种方法是使用原型(prototype)。在这种情况下

javascript - 我如何销毁这个 Backbone.js View 实例?

varCheckboxView=Backbone.View.extend({tagName:'div',template:_.template(item_temp,{}),events:{'click.checkoff_friend':'toggleCheckFriend',},initialize:function(){},render:function(){},toggleCheckFriend:function(){//destroythisViewinstance.}});varcv=newCheckboxView();如何销毁实例?激活切换后,我希望该View的实例永远消失。

javascript - 关于 JavaScript 工作原理的几个问题

我最近一直在深入研究JavaScript以完全理解这门语言,并且有一些我似乎无法找到答案的烦人问题(特别是处理面向对象编程)。假设以下代码:functionTestObject(){this.fA=function(){//dostuff}this.fB=testB;functiontestB(){//dostuff}}TestObject.prototype={fC:function{//dostuff}}函数fA和fB有什么区别?它们在范围和潜在能力上的表现是否完全相同?这只是惯例,还是一种技术上更好或更合适的方法?如果在任何给定时间只有一个对象的实例,向原型(prototype)