草庐IT

javascript - 我的 'this' 在哪里?使用对象方法作为回调函数

我有一个关于javascript规范或函数指针(委托(delegate)?)实现的一般性问题,它们指向对象方法。请阅读以下代码片段。这里我们有一个对象,其方法使用“this”来访问对象字段。当我们像往常一样调用此方法时(o.method();),返回对象指定字段的值。但是当我们创建指向此方法(回调)的指针并调用它时,返回一个未定义的值,因为方法范围内的“this”现在是全局对象。varo={field:'value',method:function(){returnthis.field;}};o.method();//returns'value'varcallback=o.method

javascript - 什么是好的简约 Javascript 继承方法?

我正在重写一个JavaScript项目,我希望能够使用面向对象的方法来整理当前代码的困惑情况。主要问题是此JavaScript应该作为小部件在第3方网站内运行,我不能让它与其他网站可能使用的其他JavaScript库发生冲突。所以我正在寻找一种在具有以下要求的JavaScript中编写“类类”继承的方法:没有外部库或会与外部库冲突的东西(这排除了从外部库复制和粘贴的可能性)。极简主义-我不希望支持代码超过几行代码,也不希望开发人员每次定义新类或方法时都需要大量样板。应允许动态扩展父对象,以便子对象看到更改(原型(prototype))。应该允许构造函数链接。应该允许super类型调用。

javascript - 我什么时候应该使用 `this.x` 与 `var x` ?

在创建JavaScript类函数时,我使用了this。很多。但是在使用它时,我想知道使用var是否会有所不同。varMyClass=function(){this.x=4;return{getVal:this.x};}与var的使用对比:varMyClass=function(){varx=4;return{getVal:x};}有什么区别,什么时候应该使用哪个?同样的问题适用于class语法:classMyClass{constructor(){constx=4;}}对比classMyClass{constructor(){this.x=4;}} 最佳答案

javascript - 在 Angular 服务中扩展基类

我有一个基类,我想在服务中扩展它以帮助将数据获取到Angular范围内。我在网上搜索了一种解决方案,但没有找到我喜欢的解决方案。我有一个用于访问设备文件系统的基类类结构:varcOfflineStorageBase=Class.extend({init:function(){},CreateFolderDir:function(){},DeleteAll:function(){},DeleteDirectories:function(){},DeleteItem:function(){},GetFiles:function(){},FileExists:function(){},Get

javascript构造函数重置: What is it?

我看到这张幻灯片:http://www.slideshare.net/stoyan/javascript-patterns#postComment第35页:选项5+super+构造函数重置functioninherit(C,P){varF=function(){};F.prototype=P.prototype;C.prototype=newF();C.uber=P.prototype;C.prototype.constructor=C;//WHY???}我不明白。谁能解释一下最后一行是什么?C.prototype.constructor=C;//WHY???谢谢

JavaScript:在数组文字中访问自己的对象属性

给定一个JavaScript对象中的数组文字,访问它自己的对象的属性似乎不起作用:varclosure={myPic:document.getElementById('pic1'),picArray:[this.myPic]}alert(closure.picArray[0]);//alerts[undefined]而通过访问其他JavaScript对象来声明数组项似乎可行​varclosure1={​​myPic:document.getElementById('pic1')​}​​varclosure2={​​picArray:[closure1.myPic]​}​​alert(c

javascript - 为什么开发人员在 JavaScript 中使用 get 和 set 时使用 "_"?

这个问题在这里已经有了答案:JavaScriptclasseswithgetterandsettercauseRangeError:Maximumcallstacksizeexceeded(5个答案)关闭3年前。我知道使用下划线只是JavaScript中定义私有(private)变量的约定。但是我遇到了一个用例[在使用类时],其中似乎必须使用_才能使代码正常工作!我的问题是_是如何被get和set使用的。下面的代码会抛出一个错误:RangeError:MaximumcallstacksizeexceededclassUser{constructor(name){this.name=na

JavaScript:公共(public)、私有(private)、 protected

我一直以为“Public”、“Private”和“Protected”关键字是针对PHP或Java的,而不是JavaScript,但后来才发现这些是保留字。任何人都可以举例说明如何或何时使用这些特定的保留字,因为我从未在JavaScript中看到或使用过它们,但想知道何时使用它们。谢谢 最佳答案 这些保留以备将来使用。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Reserved_Words 关于Jav

javascript - 如何在 ES6 中使用私有(private)变量?

这个问题在这里已经有了答案:PrivatepropertiesinJavaScriptES6classes(41个回答)关闭6年前。在ES5中,你可以像这样用私有(private)和公共(public)变量模拟一个类:car.jsfunctionCar(){//usingvarcausesspeedtobeonlyavailableinsideCar(private)varspeed=10;//publicvariable-stillaccessibleoutsideCarthis.model="Batmobile";//publicmethodthis.init=function()

Javascript 面向对象语法

在JavaScript中似乎有许多不同的OO方法。我喜欢:functionClassA(){};ClassA.prototype={someFunc:function(a,b,c){},otherFunc:function(){}}varc=newClassA();并且从未使用过超出此功能的功能(尽管是一个熟练的OOer)。我怀疑这是过时的做法,因为我经常看到新的亮片变体,这让我怀疑我是否选择了最好的方法。例如,您可以在构造函数方法中施展魔法来创建私有(private)变量和访问器方法,我认为(直到最近)这是不可能的。子类化呢?我不知道如何实现这一点,但现在它必须有某种通用模式。你是怎