让我说我有这个功能:
function myFunc () {
this.property1 = 10;
}
var myObject = new myFunc();
现在我想说我想为它添加一个新属性。
myFunc.newProperty = "New";
myObject.newProperty = "New";
myFunc.prototype.newProperty = "New";
这些方法有什么区别?我应该使用哪一个?
答案 0 :(得分:3)
方法1
myFunc.newProperty = "New";
因为function本身是一个对象,所以只需在其上创建一个新属性即可。如果您直接使用功能对象。
,这可能会很有用方法2
myObject.newProperty = "New";
在myFunc
构造函数的新实例上,创建自己的属性。当您需要修改单个实例但不想使用newProperty
修改类本身时很有用。
使用new myFunc()
创建的任何新实例都不会继承或包含newProperty
。
方法3
myFunc.prototype.newProperty = "New";
如果修改构造函数原型,则创建的对象将继承此属性。当您需要使用new myFunc()
创建的任何现有对象或新对象继承newProperty
时非常有用。
使用哪一个取决于任务。通常使用 2 和 3 点。
答案 1 :(得分:1)
myFunct
是构造函数(实际上JS中的每个函数都可以用作构造函数),当与new
一起使用时,此函数会创建一个新对象。
现在您想要向对象添加新属性:
1)想要为已创建的myObject添加新属性
myObject.newProperty = "New";
2)想要为从myFunc
function myFunc () {
this.property1 = 10;
this.newProperty = "New";
}
3)希望在已经从myFunc
创建的所有对象中拥有新属性,并且它应该是来自{{1的所有新创建的对象的父对象的属性(因此只有一个副本可用) }}
myFunc
答案 2 :(得分:1)
所以当你做的时候
A = cellfun(@transpose,Arad,'UniformOutput',false); %transpose the cell array
maxSize = max(cellfun(@numel,A)); %# Get the maximum vector size
fcn = @(x) [x nan(1,maxSize-numel(x))]; %# Create an anonymous function rmat = cellfun(fcn,A,'UniformOutput',false); %# Pad each cell with NaNs
rmat = horzcat(rmat{:}) ; % concatenate horizontally
rmat = horzcat(rmat{:}) ; % concatenate horizontally again
rmat = reshape(rmat,maxSize, []);% reshape to m(=maxsize)x n(determined by total number of elements/number of rows(maxsize)
此属性被视为myFunc的私有属性,因此即使您创建了myFunc的某个实例,也无法访问。
的情况相同
myFunc.newProperty = "New";
当你将它作为myObject的私有属性处理时,所以在myObject之外你无法访问它。
当你做的时候
myObject.newProperty = "New";
您可以从myFunc的所有实例访问newProperty。
哪个好,哪个坏,我不能说它的所有要求