对嵌套函数的Javascript调用
我对javascript比较陌生,但通过使用Java,我学到了很多关于OO编程的知识。要么javascript不是很面向对象,要么我遗漏了一些东西。Java的类具有与javascripts函数类似的方法,但我注意到javascript函数也充当类对象,而不仅仅是方法。我很困惑,如果一个函数可以变成一个对象,那么这个对象不应该有可用的函数吗 Javascript实现:对嵌套函数的Javascript调用,javascript,nested-function,Javascript,Nested Function,我对javascript比较陌生,但通过使用Java,我学到了很多关于OO编程的知识。要么javascript不是很面向对象,要么我遗漏了一些东西。Java的类具有与javascripts函数类似的方法,但我注意到javascript函数也充当类对象,而不仅仅是方法。我很困惑,如果一个函数可以变成一个对象,那么这个对象不应该有可用的函数吗 Javascript实现: function Div() { var div = document.createElement('div'); func
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:您不应该更改原始代码,因为现在答案不再有意义了。我主要喜欢这个答案,因为我的函数仍然是嵌套的,尽管调用了这个。你很累:)