function是一个对象,但是一个对象是从Javascript中的函数创建的

时间:2014-06-12 07:40:47

标签: javascript function object

任何人都能解释一下吗?

我读到函数只是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?

有关

3 个答案:

答案 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函数只是一般意义上的哈希映射或对象!