2016-01-20 127 views
0

我曾经写了很多Javascript,现在我只是跳回到它,但似乎我已经失去了我的想法。我正在尝试使用函数创建一个对象,而且我的做法与我的在线搜索建议我应该这样做的方式相同。我创建了这个例子来展示我尝试过的很多方法。Javascript创建对象结构

<script> 
function a(){ 
    function b(){}; 
    this.c = function(){}; 
    this.d = 0; 
    var e = function(){}; 
    var f = 0; 
} 
a.g = function(){}; 
a.prototype.h = function(){}; 

var a2 = function(){ 
    function b(){}; 
    this.c = function(){}; 
    this.d = 0; 
    var e = function(){}; 
    var f = 0; 
} 
a2.g = function(){}; 
a2.prototype.h = function(){}; 
</script> 

从我记得,我应该能够调用A·B()交流转换器(),并A.D,同样为A2

但是,当我尝试调用它们时,它不起作用。当我在控制台中键入变量名称时,它甚至不会将它们显示为选项。但我可以拨打a.g()。我不能打电话a.h(),但我可以打电话a.prototype.h()

我在Chrome中尝试了这一点,在firefox和Safari中也有一些东西。

据我从网上教程可以告诉,这不是我应该期待它的方式相互作用。

回答

2

b,ef是函数a范围内的变量。他们从不暴露于此功能之外。

cd分配,a被调用,以什么this是。如果您致电new a(),那么它将是返回的实例。

ga的财产,所以你可以打电话给它。

h是原型链所以它会出现,比如cd,与new创建的a实例。

+0

好的,谢谢。我想我错过了'新'关键字。现在有道理。 –