public Foo {
private int value;
public Foo(int init_value){
value = init_value;
}
public void sayValue(){
System.out.println("print: " + value);
}
public static void main(String[] args){
Foo bar = new Foo(233); // new一个Foo类实例,从Foo的构造器(里面的Foo方法)入手
bar.sayValue(); // print: 233
}
}
上面的例子可以看到java的对象生成是相对更复杂的的
需要 Foo 构造器(没有就用默认)
传递给构造器的参数可以不同,可以有多个构造器,有不同的构造策略
需要 new 操作符
保存对象的变量是有类型的 这里算是 Foo 类型 ( Foo bar = new Foo(233); )
楼主可以引入以一个观念,就是JS是基于对象的脚本语言,就是说他的对象有着十分特别的实现。
首先JS函数的声明其实也是创建一个对象的实例,这个对象叫做
Function:这样就好理解了吧,其实JS中的函数本身也是一个对象的实例,这样的实例既有原型
prototype,又有_proto_,可以将此比作“波粒二象性”;我们把函数(有具体作用的代码段)比作波(包含一个起点到终点的过程,对于函数就是执行到返回);
把对象比作粒(具有实体的单元,对于对象来说就是实例);
那么JS里的函数对象就具有物理上所说的“波粒二象性”。
因此:
在JS中,函数本身也是一个对象,因此“通过函数创建对象”的说法从实现上来说的确没有问题,但并不准确。
“函数对象”这个概念应当区分于普通对象—————创建了一个对象,它不一定是函数(构造函数),而一旦声明了一个函数,这个函数一定是一个对象。
Function的爹是Object(),所以说,JS是基于对象的脚本语言。
有什么不对么?人家说的非常对啊,看不懂建议多看几遍,写写例子
如果题主学过
java,应该知道java的对象由定义在类里面的构造器生成。看看
上面的例子可以看到java的对象生成是相对更复杂的的
需要 Foo 构造器(没有就用默认)
传递给构造器的参数可以不同,可以有多个构造器,有不同的构造策略
需要
new操作符保存对象的变量是有类型的 这里算是
Foo类型 (Foo bar = new Foo(233);)反观JavaScript
这里我用
.操作符来访问对象的属性,这样能通过调用某些方法看到函数的名字和函数源码之类,反应了js函数是对象的事实,另外,也可以用foo instanceof Object来看看foo是不是对象。顺便一提Java的方法不是对象。
题主的疑惑
题主应该是初学JS的吧? 你应该改变你对函数的看法了,
JS里的函数跟C和Java这类经典语言的函数(方法)有较大不同(最显而易见的是当参数传递这点)。还有题主的问题问的比较模糊,希望能描述清楚一些。
个人也认为JS的对象都是由构造函数之类生成的,函数是对象毋庸置疑。