这两个扩展函数有什么区别?
angular.extend(a,b);
$.extend(a,b);
Run Code Online (Sandbox Code Playgroud)
虽然jquery.extend有很好的文档记录,但angular.extend缺少细节,而那里的注释没有提供任何答案.(https://docs.angularjs.org/api/ng/function/angular.extend).
angular.extend还提供深层复制吗?
我有问题将数据附加到已经是列表格式的列表中.我有一个程序,它将在模拟循环中导出结果对象.数据本身存储为矩阵列表.我的想法是将这些列表存储在一个列表中,然后将这个列表列表保存为R对象以供以后分析,但是我遇到了一些正确的问题.我将使用值而不是模拟中的矩阵数据来展示我用小抽象示例所做的事情:
假设我已经运行了3次模拟循环.在迭代期间,结果列表需要收集到我将保存为R对象的列表列表中:
列表包含其他列表并保存:
outlist1 <- list()
第一次迭代:
resultsa <- list(1,2,3,4,5)
outlist <- append(outlist1,resultsa)
第二次迭代:
resultsb <- list(6,7,8,9,10)
outlist <- append(outlist1,b)
第三次迭代:
resultsc <- list(11,12,13,14,15)
outlist <- list(outlist2,c)
但是,此解决方案不适用于以这种方式增长包含列表的列表,所需的结果是:
>outlist
[[1]]
[[1]][[1]]
[1] 1
[[1]][[2]]
[1] 2
[[1]][[3]]
[1] 3
[[1]][[4]]
[1] 4
[[1]][[5]]
[1] 5
[[2]]
[[2]][[1]]
[1] 6
[[2]][[2]]
[1] 7
[[2]][[3]]
[1] 8
[[2]][[4]]
[1] 9
[[2]][[5]]
[1] 10
[[3]]
[[3]][[1]]
[1] 11
[[3]][[2]]
[1] 12
[[3]][[3]]
[1] 13
[[3]][[4]]
[1] 14
[[3]][[5]]
[1] 15
Run Code Online (Sandbox Code Playgroud)
但是,我得到的是:
> outlist3 …Run Code Online (Sandbox Code Playgroud) 我正在努力使用nodeJS中的对象的深层副本.我自己的延伸是废话.下划线的延伸是持平的.在stackexchange上有相当简单的扩展变体,但是没有一个甚至接近jQuery.extend(true,{},obj,obj,obj)..(大多数实际上都很糟糕并且搞砸了asnyc代码的好处.)
因此,我的问题是:NodeJS有一个很好的深层副本吗?有人移植过jQuery吗?
我正在尝试编写一个插件,它将扩展jQuery中的现有函数,例如
(function($)
{
$.fn.css = function()
{
// stuff I will be extending
// that doesn't affect/change
// the way .css() works
};
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
我只需要几个位来扩展该.css()功能.请注意,我可以考虑PHP类className extend existingClass,所以我想问是否可以扩展jQuery函数.
我尝试使用一些用户友好的方法(如Array.Add()而不是Array.push()等在javascript中扩展Array对象...
我实现了3种方法.不幸的是,第三种方式不起作用,我想问为什么?以及如何做到这一点.
//------------- 1st way
Array.prototype.Add=function(element){
this.push(element);
};
var list1 = new Array();
list1.Add("Hello world");
alert(list1[0]);
//------------- 2nd way
function Array2 () {
//some other properties and methods
};
Array2.prototype = new Array;
Array2.prototype.Add = function(element){
this.push(element);
};
var list2 = new Array2;
list2.Add(123);
alert(list2[0]);
//------------- 3rd way
function Array3 () {
this.prototype = new Array;
this.Add = function(element){
this.push(element);
};
};
var list3 = new Array3;
list3.Add(456); //push is not a function
alert(list3[0]); // undefined
Run Code Online (Sandbox Code Playgroud)
在第三种方式,我想在内部Array3类扩展Array对象.如何做到这一点,以免"推不是一个功能"和"未定义"?
在这里,我添加第四种方式.
//------------- 4th …Run Code Online (Sandbox Code Playgroud) 我读过的所有ExtJS文档和示例都建议调用这样的超类方法:
MyApp.MyPanel = Ext.extend(Ext.Panel, {
initComponent: function() {
// do something MyPanel specific here...
MyApp.MyPanel.superclass.initComponent.call(this);
}
});
Run Code Online (Sandbox Code Playgroud)
我已经使用这种模式很长一段时间了,主要的问题是,当你重命名你的类时,你还必须改变所有对超类方法的调用.这很不方便,经常我会忘记,然后我必须追查奇怪的错误.
但是看完来源Ext.extend(),我发现,这不是我可以使用superclass()或super()该方法Ext.extend()增加了原形:
MyApp.MyPanel = Ext.extend(Ext.Panel, {
initComponent: function() {
// do something MyPanel specific here...
this.superclass().initComponent.call(this);
}
});
Run Code Online (Sandbox Code Playgroud)
在这个代码中,将MyPanel重命名为其他东西很简单 - 我只需更改一行.
但我怀疑......
我没有在任何地方看到过这种情况,旧的智慧说,我不应该依赖于无证件的行为.
我没有在ExtJS源代码中找到这些superclass()和supr()方法的单独使用.为什么在你不打算使用它们时创建它们?
也许这些方法在某些旧版本的ExtJS中使用但现在已被弃用?但它似乎是一个非常有用的功能,你为什么要弃用呢?
那么,我应该使用这些方法吗?
是否可以扩展控制台对象?
我尝试过类似的东西:
Console.prototype.log = function(msg){
Console.prototype.log.call(msg);
alert(msg);
}
Run Code Online (Sandbox Code Playgroud)
但这没效果.我想通过像log4javascript这样的框架向控制台对象添加额外的日志记录,并且仍然在我的代码中使用标准控制台对象(在log4javascript不可用的情况下).
提前致谢!
为什么python 2.5.2具有以下行为
>>>[2].extend([]) == [2]
False
>>> [2].extend([]) == None
True
$ python --version
Python 2.5.2
Run Code Online (Sandbox Code Playgroud)
我假设我在这里不理解某些东西,但直觉上我认为[2] .extend([])应该产生[2]
我有一个类,我需要根据标准扩展不同的类(最多数百个).PHP中有没有办法通过动态类名扩展类?
我假设它需要一个方法来指定实例化的扩展.
想法?