使用返回对象的对象构造函数.它是如何工作的
Using Object constructors that return objects. How it works?
我一直在创建JS对象,像这个a = {}
或这个a = new MyConstructor()
没有考虑太多。
然后我编写了如下代码:
function Constructor(){
var private = {
a:1,
b:2
};
return private;
}
var a = new Constructor();
a
现在自然包含了private
对象的一个新实例。然后我意识到new
运算符是不需要的,因为每次调用Constructor
函数时都会创建private
对象。
所以实际的问题是:调用new Constructor()
时会发生什么?
为什么不直接做a = Constructor()
呢?
如果Constructor
对象有公共属性,会发生什么?
从构造函数返回对象是个坏主意吗?
调用
new Constructor()
时会发生什么?
请查看new
操作符和What is the 'new'关键字在JavaScript?问题。
创建一个实例(如Object.create(Constructor.prototype)
),它可以通过Constructor
函数中的this
访问。然而,调用的结果将仅仅是返回的对象(private
),它被赋值给a
。
为什么不直接做
a = Constructor()
呢?
实际上,你应该这样做。Constructor
不是构造函数,它不创建实例——它只是返回private
对象。因此,不要使用new
。然而,你也应该重命名函数,使其清晰,例如为makeXYZ()
。
Constructor
对象的公共属性会发生什么任何?
a
和b
是返回对象的"公共"属性。
如果你指的是Constructor
函数本身的"静态"属性,那么它们不会发生任何变化。
如果您指的是Constructor.prototype
上的"共享"属性-它们不会发生任何事情,它们不会被返回的对象继承(这可能不是预期的)。
从构造函数返回对象是个坏主意吗?
来自构造函数,是的。
从一般的函数来看,没有。让它成为一个普通的工厂函数(即返回对象的函数),这是一个很好的模式。
你面对的是" NativeObject" javascript模式。它模拟了一些OOP范例,如封装、多态、继承、抽象等。
使用"new"关键字创建对象的新实例,在JS中可以是
var function_example = function() {
var privateField = 11;
var publicField = 22;
return {
publicField: publicField
}
}
所以,当你想要获取对象时你可以调用这个函数:
var object = function_example();
如果你想把function作为委托,并给它分配一个引用,你可以:
var function2_axample = function_example;
如果你想创建一个新的实例,你应该:
var instance = new function_example();
var publicValue = instance.publicField;
所以,你可以记住,与OOP范式相比,它是这样的:函数-它是类,新函数-它是实例。
- 如何让我的正则表达式代码在我的dojo cellWidget对象上工作
- 地图如何在 Ecmascript 6 中使用对象键工作
- 一个对象怎么能像返回自身和另一个对象一样工作
- dojo类对象的工作原理
- 当使用单元.js库时,克隆对象的工作方式很奇怪
- 如何使与jquery延迟对象一起工作的函数表现得像同步函数
- Javascript调用同一对象内的对象方法工作不正常
- 切换锚点以仅在第一个子对象中工作
- 函数保存JS对象不工作
- 了解数组中的对象以及长度特性如何在对象上工作
- 本地存储中的数组和对象不工作
- Rails: Javascript不能在分页对象上工作
- 在jquery代码中从数组中移除重复对象不工作
- ChartJs不能与这个JSON对象一起工作
- JavaScript对象不工作
- jQuery AJAX JSON对象不工作
- JavaScript对象.赋值不能在Date对象上工作
- 在操作DOM时无法使对象方法工作
- JSON.stringify没有'不能在可循环的JSON对象中工作.该怎么办
- Xlxs.js的“l"单元格超链接对象选项工作