我想访问像这样的对象中的函数
function MyObject()
{
this.create = function(array)
{
var myArray = array;
this.arrayLength = function(){return myArray.length;}
// Do something else here...
}
}
var foo = new MyObject();
foo.create(value);
console.log(foo.create.arrayLength(););
我未定义为.create.length()的响应,是否可以这样做?
答案 0 :(得分:4)
当您使用.create()
调用foo.create()
方法时,.create()
this
内的foo
为this.arrayLength = function(){return myArray.length;}
。所以这一行:
arrayLength()
在foo
上创建方法console.log(foo.arrayLength());
。所以只需使用:
arrayLength()
如果出于某种原因,您确实希望create
成为this.create.arrayLength = function(){return myArray.length;}
的方法,那么您可以这样做:
console.log(foo.create.arrayLength());
然后使用原文:
{{1}}
(减去结束括号之前的额外分号)。
但是虽然后一版本“有效”,但这似乎是一种奇怪的方式。
答案 1 :(得分:1)
in:
this.create = function(array)
{
var myArray = array;
this.arrayLength = function(){return myArray.length;}
}
this
引用foo
,因为您使用create
而不是something.create()
来调用new MyObject.create()
,在这种情况下this
会引用create
arrayLength
的实例。这意味着create
不是函数var foo = new (new MyObject).create();
console.log(foo.create.arrayLength(););
的属性,因此您无法以这种方式调用它。
{{1}}
但是会工作。
如果你告诉我们你想做什么,我们肯定会想到一种不太奇怪的方式。
答案 2 :(得分:0)
我不确定你的最终目标是什么,所以我会说一些我还没有看到的东西
var foo = new MyObject();
// `foo` has no property _arrayLength_
foo.create([1, 2, 3]); // _create_ sets `this.arrayLength`
// `foo` now has property _arrayLength_
foo.arrayLength(); // 3
答案 3 :(得分:0)
以下是对代码的修复,只需更改:
function MyObject() {
function arrayCreate(array) {
var myArray = array;
arrayCreate.arrayLength = function() {
return myArray.length;
}
}
this.create = arrayCreate;
// Do something else here...
}
var foo = new MyObject();
foo.create([1,2,3]);
console.log(foo.create.arrayLength());
答案 4 :(得分:0)
很好地解释了问题所在。
所以要修复它,只需更改定义arrayLength方法的行。
更改此行:this.arrayLength = func...
对此:this.create.arrayLength = func...