只是我发现下面的代码本质上是倒退的吗?
我正在使用此帖子作为参考.
// create the inner div
var $inner = $("<div>inner</div>")
// append it to a new outer div
.appendTo("<div>outer</div>")
// next change the jQuery chain to the "outer" div
.parent()
// append the outer div to the body
.appendTo("body")
// finally, go back to the last destructive command,
// giving us back a pointer to the "inner" div
.end();
Run Code Online (Sandbox Code Playgroud)
我最初的方法是抓住身体,然后在身体外面附上一个外层,然后在内部附加一个内部.
接近它然后跳过层次结构,parent ()只是让我觉得有点好奇......
我想知道以下Java代码:
"的System.out.println".我是对的:
"系统"是一个静态类.".out"是类"系统"的方法.这是我对".println"感到困惑的一点 - 这个方法是什么类/对象?
此外,这个概念被称为"方法链"吗?
谢谢
GF
我见过其他对象这样做:
$obj->method1()->method2();
Run Code Online (Sandbox Code Playgroud)
我怎么做?每个函数只是修改对象的指针还是返回指针?
我不知道这种风格的正确用语 - 如果有人能帮助我,那就太棒了.
我在PHP5中有一个关于OOP的问题.我看到越来越多的代码编写如下:
$object->function()->first(array('str','str','str'))->second(array(1,2,3,4,5));
Run Code Online (Sandbox Code Playgroud)
但我不知道如何创建这种方法.我希望有人能在这里帮助我,:0)非常感谢.
是否有关于何时停止链接方法的指南,而是将链分解为多个表达式?
考虑例如这个Python代码,它构建一个字典,word为key,相应的count为值:
def build_dict(filename):
with open(filename, 'r') as f:
dict = defaultdict(int)
for word in f.read().lower().split(): # too much?
dict[word] += 1
return dict
Run Code Online (Sandbox Code Playgroud)
链接3种方法好吗?通过分割表达式,我可以获得任何显着的好处吗?
我正在考虑使用扩展方法链接ac#语句,看起来像下面的jQuery:
foo foo2 =
new foo().Title(foo1.Title)
.Name(foo1.Name)
.DoSomeStuff()
.DoSomeMoreStuff();
Run Code Online (Sandbox Code Playgroud)
这是好主意吗?
public class foo
{
public string Title {get;set;}
public string Name {get;set;}
public int Age {get;set;}
public foo(){}
}
public static class fooExtension
{
public static foo Title(this foo source, string title)
{
source.Title = title;
return source;
}
//and other extensions
}
Run Code Online (Sandbox Code Playgroud)
Upadate:更多解释为"为什么"我正在考虑这个问题. 我有两件事情在继续:
所以我的初始代码看起来更像
foo2.bars = foo1.bars;
foo2.RemoveUnderage();
foo2.NotifyPatronsBarsAreFull();
Run Code Online (Sandbox Code Playgroud)
相反,我认为写作可能更具描述性:
foo2.bars(foo1.bars).RemoveUnderage().NotifyPatrons();
Run Code Online (Sandbox Code Playgroud)
初始化器很棒,但它们也将所有属性捆绑在一起,我希望属性集接近我将采取的操作.
假设我有这门课.
class foo{
function a(){
return $this;
}
}
Run Code Online (Sandbox Code Playgroud)
.
$O = new foo();
$O->a()
->a()
->a();
Run Code Online (Sandbox Code Playgroud)
有没有什么方法可以知道,在最后一个函数->a()之前它被调用了多少次?因此,我可以像'method ->a() has been called twice before this.'
我想要找到的那样输出,不使用增量值,如声明属性,然后递增增加它,每次在函数中调用它.
如果OOP中有一个可以提供此解决方案的隐藏功能,我只是跳来跳去
嗨我有一个像PHP的方法链
<?php
auth::('username') -> is_logged() -> doSomething();
//execute something
?>
Run Code Online (Sandbox Code Playgroud)
我想做的是如果用户没有登录,那么不调用doSomething()函数.一种方法是取消设置$ this,但这将产生一个错误ID,有任何其他方式来做到这一点.此外,我不能使用die(),因为它会停止编译器,并防止执行后编写的代码.最好的方法是什么,最好没有任何警告或错误,同时由于与该类相关的大量功能而尽可能少地进行更改.
我有简单的c ++程序,它使用方法链接,我注意到析构函数只在链式调用中被调用两次.仅当链调用包含构造函数时才会发生这种情况.如果单独调用析构函数只调用一次.
代码如下:
class Foo {
public:
Foo() { cout << "-- constructor " << this << endl; }
~Foo () { cout << "-- destructor " << this << endl; };
Foo& bar() {
cout << "---- bar call " << this << endl;
return *this;
}
};
int main() {
cout << "starting test 1" << endl;
{
Foo f = Foo();
}
cout << "ending test 1" << endl << endl;
cout << "starting test 2" << …Run Code Online (Sandbox Code Playgroud) 在jQuery中有一种方法可以保存常用的函数链以便稍后引用,以保持DRY编码风格吗?
例如,在以下代码中,我想引用链.closest('.row').closest('div').remove();:
$('#search-results .row .unsafe').closest('.row').closest('div').remove();
$('#search-results .warnings').closest('.row').closest('div').remove();
$('#search-results .textresults1:contains("Endpoint offline!")').closest('.row').closest('div').remove();
// lots more distinct selectors
Run Code Online (Sandbox Code Playgroud)
像这样的东西:
var bye = ".closest('.row').closest('div').remove()";
$('#search-results .row .unsafe').bye();
$('#search-results .warnings').bye();
$('#search-results .textresults1:contains("Endpoint offline!")').bye();
// more...
Run Code Online (Sandbox Code Playgroud)
我的问题仅涉及以这种方式重用函数链 - 即jQuery是否有一种方法来执行在变量中存储为字符串的函数链.我很欣赏任何代码示例都可以重写以避免需要,但这是一个不同的问题.我认为可能存在很多用于存储常用函数链的用例 - 例如,对于复杂的样式/动画例程.
[我知道可以修改第一个选择器以包含所有后续选择器,但是这样做是为了提高性能.#search-results包含成千上万<div>的,每个都有十几个元素.这样,模糊搜索最后完成(即松散文本匹配:contains),之前的选择器已经杀掉了几千行.此外,这个特定的代码取自我正在编写的Greasemonkey用户脚本,所以我没有选择直接在源,服务器端删除这些虚假结果 - 它不是我的服务器/网站]
method-chaining ×10
php ×4
jquery ×2
oop ×2
c# ×1
c++ ×1
coding-style ×1
destructor ×1
java ×1
javascript ×1
methods ×1
object ×1
python ×1