小编McS*_*man的帖子

由PHP中的getIterator返回的数组IteratorAggregate不可遍历

我正在尝试使用PHP IteratorAggregate,但没有太多运气.实现IteratorAggregate的对象具有属性$ items,它是一个对象My_Object的数组.

当用户使用带有My_Collection实例的foreach语句时,我希望它迭代$ items数组......但是下面的代码似乎没有按预期工作.

class My_Object {

    public $value;

    public function __construct( $value ) {
        $this->value = $value;
    }

}

class My_Collection implements IteratorAggregate {

    protected $items = array();

    public function add_item( $value ) {
        array_push( $this->items, new My_Object( $value ) );
    }

    public function getIterator() {
        return $this->items;
    }
}

$my_collection = new My_Collection();
$my_collection->add_item( 1 );
$my_collection->add_item( 2 );
$my_collection->add_item( 3 );

foreach( $my_collection as $mine ) {
    echo( "<p>$mine->value</p>" );
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

<b>Fatal error</b>:  Uncaught exception …
Run Code Online (Sandbox Code Playgroud)

php arrays iterator class

3
推荐指数
1
解决办法
1633
查看次数

在javascript中为变量分配自执行匿名函数有什么好处?

我正在阅读有关如何在窗口调整大小完成后触发函数帖子,并且遇到了一些将自动执行匿名函数分配给变量的示例:

var delay = (function(){
    var timer = 0;
    return function(callback, ms){
        clearTimeout (timer);
        timer = setTimeout(callback, ms);
    };
})();

$(window).resize(function() {
    delay(function(){
      alert('Resize...');
      //...
    }, 500);
});
Run Code Online (Sandbox Code Playgroud)

与传统用法相比,使函数操作数自行执行有什么区别/好处?即

var delay = function() { ... 
Run Code Online (Sandbox Code Playgroud)

javascript anonymous-function

2
推荐指数
1
解决办法
2200
查看次数

什么已经取代了JavaScript中已弃用的__proto__

我试图找出如何从另一个实例化的对象实例化一个新对象,而无需使用new运算符.以下代码有效,但我听说__proto__属性已折旧.

var MyObject = function( arg ) {

    this.value = arg;

};

MyObject.prototype.getValue = function() {

    return this.value;

};

// Standard way of instantiating an object
var object1 = new MyObject( 'foo' );

// Creating new object based on another without using new operator
var object2 = {};
object2.__proto__ = object1.__proto__
object1.constructor.call( object2, 'bar' );

console.log( object1 );
console.log( object2 );
Run Code Online (Sandbox Code Playgroud)

那么如果没有__proto__属性我该如何做呢?

javascript prototype

2
推荐指数
1
解决办法
2702
查看次数

在JavaScript中编写对象方法的最佳方法是什么?

OOP建议只公开您希望用户能够访问的变量和方法.我一直在为我的对象使用公共方法声明(即原型).

DrawShape = function() {

}

DrawShape.prototype.circle = function() {
    // draw logic here
}

DrawShape.prototype.square = function() {
    // draw logic here
}
Run Code Online (Sandbox Code Playgroud)

这种方法似乎是最有效的,因为每次实例化实例时都不会重写该方法.但是我发现要创建好的DRY,模块化代码我必须创建仅供其他方法访问的方法(即私有方法).

DrawShape = function() {

}

DrawShape.prototype.circle = function() {
    var colour = this.setColour();
    // draw logic here
}

DrawShape.prototype.square = function() {
    var colour = this.setColour();
    // draw logic here
}

DrawShape.prototype.setColour = function() {
    return "blue";
}
Run Code Online (Sandbox Code Playgroud)

在这里,我创建了一个名为setColour的方法,该方法仅用于由其他方法运行.问题是该方法是公开的,可以被任何人或任何人调用.

我可以将方法移动到对象构造函数中...但这意味着我不再保存内存(即每次实例化实例时都会重写),这也意味着我必须移动所有其他方法进入构造函数.

在创建对象时,JavaScript中的最佳实践是什么?

javascript prototype object

1
推荐指数
1
解决办法
374
查看次数

检查方法是静态运行还是从Javascript中的实例运行

编写一个小方法,我希望既可以作为对象中的方法,也可以从原型中静态运行.

这是一个例子:

function Obj() {}

Obj.prototype.func = function() {

    if( this.instantiated ) { // Yes I know this is not valid code!

        // instantiated code here

    } else {

        // instantiated code here

    }

};

var myObj = new Obj();

myObj.func();

Obj.prototype.func();
Run Code Online (Sandbox Code Playgroud)

如何判断此变量是来自实例还是来自类?

javascript

1
推荐指数
1
解决办法
28
查看次数

使用javascript的Function.prototype.bind()测试变量是否是特定的绑定函数

我试图找出如何测试变量是否是特定绑定函数的实例.请考虑以下示例:

var func = function( arg ) {
    // code here
}

myFunc = func.bind( null, 'val' );

if( myFunc == func ) {
    console.log( true );
} else {
    console.log( false );
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这导致错误.是否有某种方法来测试变量以找出它绑定的函数?

javascript bind

1
推荐指数
1
解决办法
1271
查看次数

我可以在 Javascript 中将更多参数传递给事件处理函数吗?

我一直在试图找出更多关于鼠标事件,例如onmouseoveronmouseoutonmousemove,但没有太多的信息。默认情况下,这些事件处理程序似乎只有一个参数,即事件本身。

element.onmouseover = mouseoverFunction

function mouseoverFunction( event ) {
    // Do stuff here
}
Run Code Online (Sandbox Code Playgroud)

但是我希望能够将其他参数传递给函数。

function mouseoverFunction( event, moreArgs ) {
    // Do stuff here
}
Run Code Online (Sandbox Code Playgroud)

如何将事件参数和附加参数传递给函数?

还可以将更多参数传递给事件处理函数吗?

javascript event-handling

0
推荐指数
1
解决办法
110
查看次数

Excel 将列转换为新行

我有一个看起来像这样的表:

  |   A   |     B      |     C      |     D      |
  +-------+------------+------------+------------+
1 | Name  | Language 1 | Language 2 | Language 3 |
  +=======+============+============+============+
2 | John  | English    | Chinese    | Spanish    | 
3 | Wendy | Chinese    | French     | English    | 
4 | Peter | Spanish    | Chinese    | English    |
Run Code Online (Sandbox Code Playgroud)

我想生成一个只有一种语言列的表。另外两个语言列应成为新行,如下所示:

   |   A   |    B     | 
   +-------+----------+
 1 | Name  | Language |
   +=======+==========+
 2 | John  | English  |
 3 | John  | Chinese …
Run Code Online (Sandbox Code Playgroud)

excel vba

-1
推荐指数
1
解决办法
8280
查看次数