如何在JavaScript的全局范围内向内部函数原型添加函数?

时间:2012-03-15 19:37:17

标签: javascript

function A() {  
    this.B = function() {  
        var bla;
    };
}
A.B.prototype.foo = function() {console.log("Do whatever");};

我明白了:

  

TypeError:无法读取未定义

的属性'prototype'

在这种情况下如何将函数添加到B的原型中?

3 个答案:

答案 0 :(得分:3)

我们的代码中有一些错误......以下是:

function A() {
   this.B = function() {
      var blah;
   };
}

a = new A();
a.B.prototype.foo = function()  {console.log("Do whatever")};

你的第一个问题是:

this.B() = function...

这不是有效的代码,因为你正在调用方法B并将其作为一个函数,你必须引用该属性。

你的另一个错误,就是没有实例化一个“A”对象,该函数本身不能用作对象,它只能被调用。这就是为什么当你有:

A.B.prototype

您收到了该错误消息。

我希望能为你解决一些问题,如果你有更多的疑问,请告诉我。

答案 1 :(得分:0)

BA的属性,只能从A的实例访问。

var aObj = new A;
aObj.B();

如果不使用A.B的实例,则无法访问A

您可以访问aObj.B.prototype,并为其添加方法。

aObj.B.prototype.foo = function(){
    return 'test';
};
var bar = new aObj.B;
console.log(bar.foo()); // 'test'

var bObj = new A;
var foobar = new bObj.B;
console.log(foobar.foo()); // `foo` is undefined

答案 2 :(得分:0)

您需要通过将内部函数添加到外部原型来使其可访问,然后您可以使用Outer.prototype.Inner.prototype将函数添加到内部对象,而不需要外部对象的实例。< / p>

function A() {this.a="a";}
A.prototype.B = function() {this.b="b";}
A.prototype.B.prototype.foo = function() {console.log("b is:"+this.b);}
var a=new A();
var b=new a.B();
b.foo();