Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对嵌套函数的Javascript调用_Javascript_Nested Function - Fatal编程技术网

对嵌套函数的Javascript调用

对嵌套函数的Javascript调用,javascript,nested-function,Javascript,Nested Function,我对javascript比较陌生,但通过使用Java,我学到了很多关于OO编程的知识。要么javascript不是很面向对象,要么我遗漏了一些东西。Java的类具有与javascripts函数类似的方法,但我注意到javascript函数也充当类对象,而不仅仅是方法。我很困惑,如果一个函数可以变成一个对象,那么这个对象不应该有可用的函数吗 Javascript实现: function Div() { var div = document.createElement('div'); func

我对javascript比较陌生,但通过使用Java,我学到了很多关于OO编程的知识。要么javascript不是很面向对象,要么我遗漏了一些东西。Java的类具有与javascripts函数类似的方法,但我注意到javascript函数也充当类对象,而不仅仅是方法。我很困惑,如果一个函数可以变成一个对象,那么这个对象不应该有可用的函数吗

Javascript实现:

function Div() {

var div = document.createElement('div');

 function setSize(width,height){

    div.position = 'absolute';

    div.style.width = width + 'px';
    div.style.height = height + 'px';
    div.style.background = 'black';

    document.body.appendChild(div);


}

}
HTML脚本

<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
    <script type="text/javascript" src="jWebKit.js"></script>

    <script>

        var div1 = new Div();
        div1.setSize(100,100); //Does Not Work Irritating all whom love Java...

    </script>
</body>
</html>

var div1=新Div();
第1部分:设置尺寸(100100)//不会激怒所有热爱Java的人。。。
MDN有一个很好的解决方案。基本上,使
div
setSize
属性成为
div
的每个实例:

function Div() {
    this.div = document.createElement('div');
}

Div.prototype.setSize = function(width,height) {
    this.div.style.width = width + 'px';
    this.div.style.width = height + 'px';
};

实例属性在构造函数中创建,实例之间的“共享”属性存储在原型中。ES6引入了一个新的
语法,该语法可能更接近您所熟悉的语法,但它下面只创建了一个构造函数并向原型添加属性。

您的setSize方法在这里不是定义为类的成员,而是定义为一个作用域仅限于该函数的函数

有很多方法和文档可以解释它是如何工作的,但在这里,您可以这样声明您的函数:

function Div() {// Acts as a class?

    this.div = document.createElement('div');
    this.setSize = function(width,height){
        this.div.style.width = width + 'px';
        this.div.style.width = height + 'px';
    }
}

我建议你找一些资源来正确地学习JavaScript,而不是依赖你的Java直觉。。。我从这里开始@StoneAgeCoder:就像语言一样,你必须先学习它是如何工作的。每种语言都有其独特的属性。@StoneAgeCoder JavaScript没有经典继承,它有更强大的原型继承(它可以模拟经典继承)。至于为什么设计成这样?纠缠Brendon Eich。@StoneAgeCoder:最后一点:您发现Java很容易,因为您熟悉它。我觉得JavaScript很容易,因为我对它很熟悉。要学习新东西,你必须付出努力,这可能被认为是“困难的”。尤其是当新事物是基于不同的概念,挑战你目前对事物的理解时。但我想这就是生活的方式:)一个问题,所以原型执行起来像Java方法,所以我应该能够调用新的Div().setSize();它会成功吗?JS已经成功了。如果对象本身没有属性,则会在其原型链中查找该对象。构造函数(
Func
)的每个实例都继承自
Func.prototype
属性。@StoneAgeCoder:,您从未将DOM元素添加到文档中。@FelixKling刚刚添加了一秒钟,仍然没有工作。我收到了警报,但窗口中没有任何内容。@StoneAgeCoder:使用
document.body.appendChild
@StoneAgeCoder:您不应该更改原始代码,因为现在答案不再有意义了。我主要喜欢这个答案,因为我的函数仍然是嵌套的,尽管调用了这个。你很累:)