JavaScript-相当于PHP类self::
JavaScript - Equivalent of PHP Class self::
所以我一直在搜索这个,因为无法实现它让我头疼。。。而且似乎没有我所期望的解决方案
假设我们有一个示例PHP
类:
<?php
class SampleClass {
function doA() {
echo 'Hello world';
}
function doB() {
$sampleArray = ['Hey', 'You'];
foreach( $sampleArray as $key => $value ) {
self::doA();
}
}
}
?>
由于foreach循环,此代码将回显Hello World
两次。这很好。
现在我有了这个script
:
function SectionHandler($appWrap) {
this.appWrap = $appWrap;
this.loading = function() {
this.appWrap.addClass('section-loading').html("<i class='fa fa-refresh fa-2x fa-spin'></i>");
}
this.setError = function($info) {
this.appWrap.addClass('section-error').html($info);
}
this.load = function($section) {
var $fileCheck = $.get($section).success(function(){
self.loading();
self.load($section);
}).fail(function(){
self.setError('No se pudo cargar los datos especificados desde ' + $section + ' ;');
});
}
}
我相信this.loading()
不再指向主函数,因为$.get().success()
函数。我不知道真正的原因。
问题是this.loading(), this.load(), this.setError()
都不起作用。
那么,我如何像使用PHP self::
函数一样指向主函数呢。?
--编辑--
正如@Eclectricist所指出的,this.load($section);
行将执行直到它失败或出现错误,我将整个检查改为:
var $fileCheck = $.get($section).done(function(response){
self.appWrap.html(response);
}).fail(function(){
self.setError('No se pudo cargar los datos especificados desde ' + $section);
});
试试这个:
function SectionHandler($appWrap) {
var that = this;
this.appWrap = $appWrap;
this.loading = function() {
that.appWrap.addClass('section-loading').html("<i class='fa fa-refresh fa-2x fa-spin'></i>");
}
this.setError = function($info) {
that.appWrap.addClass('section-error').html($info);
}
this.load = function($section) {
var $fileCheck = $.get($section).success(function(){
that.loading();
that.load($section);
}).fail(function(){
that.setError('No se pudo cargar los datos especificados desde /[ ' + $section + ' ]' ;');
});
}
}
问题是一旦进入函数,this
的值就会发生变化。您可以通过在主函数that
中声明一个变量来处理它,并在稍后引用它
--编辑--
我想注意的是,that.load($section);
行将递归地调用SectionHandler.load()
,直到AJAX请求失败,或者直到出现stackoverflow
错误。
是的,我一直希望出现一些可以引用该错误的东西:)
您的想法是正确的,但this
的上下文可以在另一个函数的范围内更改(在jQuery回调的上下文中也是如此),所以如果您想确保this.loading()
始终是您所指向的,那么在JavaScript中,您想将this
分配给一个变量,这样您就可以调用特定版本的this
的函数。通常称为self
或that
。像这样:
function SectionHandler($appWrap) {
var self = this;
self.appWrap = $appWrap;
self.loading = function() {
self.appWrap.addClass('section-loading')
.html("<i class='fa fa-refresh fa-2x fa-spin'></i>");
}
self.setError = function($info) {
self.appWrap.addClass('section-error').html($info);
}
self.load = function($section) {
var $fileCheck = $.get($section).success(function(){
self.loading();
self.load($section);
}).fail(function(){
self.setError('No se pudo cargar los datos especificados' +
' desde /[ ' + $section + ' ]' ;');
});
}
}
您的想法是正确的,因为这里代码中的this
不再意味着SectionHandler
,而是指$.get($section).success(function()
。处理此问题的一种方法是在进入函数之前将this
存储在变量中:
function SectionHandler($appWrap) {
var self = this;
...
this.load = function($section) {
var $fileCheck = $.get($section).success(function(){
self.loading();
...
- 使用php或javascript从facebook相册URL中删除多余的部分
- 将PHP变量传递给jQuery时遇到问题
- 通过javascript重定向html传递php变量
- 将数组从PHP传递到Javascript
- 如何在php文件中获取$.post-ajax传递的值
- Javascript运行php文件,然后下载文件
- PHP中的setcookie仅适用于localhost
- 如何使用jquery处理php循环通过元素
- 通过Ajax将JavaScript函数传递给PHP文件
- 而循环只设置php中输入字段中的第一个值
- 我需要从php调用javascript或jquery
- 如何通过php页面将数据库值检索到jquery自动完成框中
- PHP AJAX图片上传示例不上传
- 通过php页面中的js强制下载txt
- 如何在PHP中使用$_POST获取Select元素值
- 我想使用模态通过php文件发送邮件,并且我希望在提交关闭后关闭pop
- 如何在php变量中嵌入JQuery代码
- 在PHP中使用javascript更改页面标题'if'
- 如何将字符串值从php页面发送到java脚本页面
- JavaScript-相当于PHP类self::