任何人都能解释一下吗?
我读到函数只是Javascript中的一个对象,只是可以调用。即函数是对象的子集(散列图)。
但是,使用类似
的函数创建对象function Constructor() {}; a = new Constructor();
a = {} ; //a.constructor is the 'Object' Function
//And Douglas Crockfords Object.create(a) does this
Object.create = function(obj){
function F();
F.prototype = obj;
return new F();
}
所以问题是如果一个对象本身是从一个函数创建的,它怎么可能是超集呢?我确信我的逻辑原因是在某个地方失败但不清楚我不理解的是什么!感觉有点像鸡肉和鸡蛋的问题。任何人都可以帮助解决我的逻辑谬误吗?
PS:这个问题的本质与此What is a metaclass in Python?
有关答案 0 :(得分:2)
构造函数不创建对象。确切的操作“创建一个对象”并不作为javascript中的构造存在 - 尽管有一些构造涉及创建一个对象(并在其旁边做其他事情) - 对象文字{}
,new
运营商等
例如,请参阅new
运算符。当您将它与函数一起使用时,它会调用函数的内部[[Construct]]
属性:http://es5.github.io/#x13.2.2:
1. Let obj be a newly created native ECMAScript object.
- 您可以说它是由系统创建的或其他描述外部来源的方式。
创建对象后,传递作为this
参数传递给构造函数:
8. Let result be the result of calling the [[Call]] internal property of F, providing obj as the this value and providing the argument list passed into [[Construct]] as args.
然后构造函数可以修饰,添加,修改属性等等。但这不是创建对象的函数本身。
答案 1 :(得分:1)
什么是对象?它是一个软件组件,它将状态和行为一起封装到内存中的单个实体中。
根据该定义,您可以看到所有内容都可以被视为对象。函数式程序员将函数作为第一类对象。数据人员会说数据,即使是没有行为的数据,也可以被视为一个对象(虽然不是很聪明)。
JavaScript将函数视为对象。
您使用"对象"混淆了JavaScript独有的对象。 OOP。
答案 2 :(得分:0)
回答我自己的问题:
我读到函数只是Javascript中的一个可调用的对象。即函数是对象的子集(hashmaps)。
功能(javascript函数)是 hashmaps 或对象的子集(但不是 javascript对象 )这是jonLuci提到的对象的一般概念。
什么是对象?它是一个软件组件,它将状态和行为一起封装到内存中的单个实体中。 javascript中的函数是此软件对象/哈希映射概念的一部分。
所以问题是,如果一个对象本身是从一个函数创建的,它怎么可能是超集呢?
这方面的逻辑谬误是,对象在此上下文中应为" javascript对象"而不是一般意义上的对象。 javascript对象是根据所选答案解释的函数创建的!
换句话说
hashmaps(一般意义上的对象)>功能> javascript对象
<强>&GT;用于表示超集关系的种类。
具有可调用性的javascript对象即()可以被认为是javascript函数。 javascript函数只是一般意义上的哈希映射或对象!