我正在读这个链接JavaScript_syntax
这似乎是循环的 - 每个函数都是一个Object,每个Object本身都是一个函数.哪个是原子的?有人能以更好的方式解释吗?
Object instanceof Object
true
Object instanceof Function
true
Function instanceof Object
true
Function instanceof Function
true
Run Code Online (Sandbox Code Playgroud)
所以如果Function是一个Object而Object是一个函数怎么来的呢
Function === Object并且Function == Object都是假的?
我知道检查对象的实例与比较不一样.所以这里的问题是如果两个对象(实际上是类型)是彼此的实例的情况下的模糊性,那么类型不应该相同吗?
注意:Object不是Number或Array的实例,只是Function的一个实例.
我最近一直在做很多研究,但还没有得到一个非常好的答案.我在某处读到当JavaScript引擎遇到函数语句时会创建一个新的Function()对象,这会让我相信它可能是一个对象的子对象(从而成为一个对象).所以我给Douglas Crockford发了电子邮件,答案是:
不完全是因为函数语句不调用编译器.
但它产生了类似的结果.
另外,据我所知,除非已将实例化为新对象,否则不能在函数构造函数上调用成员.所以这不起作用:
function myFunction(){
this.myProperty = "Am I an object!";
}
myFunction.myProperty; // myFunction is not a function
myFunction().myProperty; // myFunction has no properties
Run Code Online (Sandbox Code Playgroud)
但是,这将有效:
function myFunction(){
this.myProperty = "Am I an object!";
}
var myFunctionVar = new myFunction();
myFunctionVar.myProperty;
Run Code Online (Sandbox Code Playgroud)
这只是一个语义问题......在整个编程世界中,对象何时真正成为一个对象,以及它如何映射到JavaScript?
如何apply()从Scala.js代码调用Javascript对象上定义的函数?
显而易见的解决方案不起作用,因为applyScala.JS(?)总是将其编译到其父对象的函数调用中:
var test = {
apply: function(idx) {...},
apple: function(idx) {...}
}
Run Code Online (Sandbox Code Playgroud)
trait Test extends js.Object {
def apple(idx: Int) : Int = ???
def apply(idx: Int) : Int = ???
}
val test = js.Dynamic.global.test.asInstanceOf[Test]
test.apple(1) // works, of course
test.apply(1) // does not work (seems to be compiled into the call test(1) ?)
js.Dynamic.global.test.apply(1) // does not work either
Run Code Online (Sandbox Code Playgroud) 当像这样从窗口对象创建以下函数时,
function userInfo() {};
Run Code Online (Sandbox Code Playgroud)
由于函数是对象,userInfo.constructor 怎么会显示函数而不是对象?
使用以下内容时,它甚至会显示 Function 而不是 Object,
Function.constructor
Run Code Online (Sandbox Code Playgroud) 我试图了解Javascript函数的行为方式.它是一个功能还是一个对象或两者兼而有之?
我是一名自学成才的网络开发人员,我仍然试图掌握一些JavaScript基础知识.以下是从Douglas Crockford的Good Parts中提取的一些引用.
"JavaScript中的函数是对象"
"在JavaScript中,数组是对象,函数是对象,正则表达式是对象,当然,对象是对象"
"每个对象都链接到一个原型对象,它可以从中继承属性"(即构造函数,toString,...)
如果Function是Object,那么为什么
console.log(typeof Function); // function
Run Code Online (Sandbox Code Playgroud)
它的类型是函数而不是对象
console.log(Object.constructor); // Function()
Run Code Online (Sandbox Code Playgroud)
它是'父母'的构造者
console.log(Function.constructor); // Function()
Run Code Online (Sandbox Code Playgroud)
困惑所以构造函数实际上是一个函数?
console.log(typeof Function.prototype); // Function
Run Code Online (Sandbox Code Playgroud)
它的原型类型是一个函数而不是一个对象?我认为它继承自Object
这些问题的答案将极大地帮助我理解JavaScript.
我肯定需要对此有所了解.
有什么区别:
var MY_APP = function(){
this.firstMethod = function(){
//something
};
this.secondMethod = function(){
//something
};
};
Run Code Online (Sandbox Code Playgroud)
和
var MY_APP = {
firstKey: function(){
//something
},
secondKey: function(){
//something
}
};
Run Code Online (Sandbox Code Playgroud)
除了一个明显的事实,一个是一个函数,另一个是一个对象,代码流,原型,模式有什么不同......什么,我们什么时候应该使用第一个或第二个?
我在这个区域如此分散,以至于我不确定我是否正确地解释了疑问,但如果你问的话可以给出进一步的信息.