Javascript 我可以创建一个';对象中函数的属性是什么?

Javascript 我可以创建一个';对象中函数的属性是什么?,javascript,Javascript,我想访问这样一个对象中的函数 function MyObject() { this.create = function(array) { var myArray = array; this.arrayLength = function(){return myArray.length;} // Do something else here... }

我想访问这样一个对象中的函数

    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()的响应,是否可以这样做?

在:

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(););
不过,这是可行的

如果你告诉我们你想做什么,我们肯定会想出一种不那么奇怪的方式。

在:

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(););
不过,这是可行的


如果你告诉我们你想做什么,我们肯定会想到一种不那么奇怪的方法。

当你用
foo.create()
调用
.create()
方法时,那么在
.create()
中,这个
就是
foo
。所以这一行:

this.arrayLength = function(){return myArray.length;}
foo
上创建方法
arrayLength()。所以只要使用:

console.log(foo.arrayLength());
如果出于某种原因,您确实希望
arrayLength()
成为
create
的一种方法,您可以这样做:

this.create.arrayLength = function(){return myArray.length;}
然后使用您的原始文件:

console.log(foo.create.arrayLength());
(减去右括号前的额外分号)


但是,虽然后一个版本“有效”,但这似乎是一种奇怪的方式。

当您使用
foo.create()
调用
.create()
方法时,然后在
.create()
中,这是
foo
。所以这一行:

this.arrayLength = function(){return myArray.length;}
foo
上创建方法
arrayLength()。所以只要使用:

console.log(foo.arrayLength());
如果出于某种原因,您确实希望
arrayLength()
成为
create
的一种方法,您可以这样做:

this.create.arrayLength = function(){return myArray.length;}
然后使用您的原始文件:

console.log(foo.create.arrayLength());
(减去右括号前的额外分号)


但是,尽管后一个版本“有效”,这似乎是一种奇怪的方式。

我不确定你的最终目标是什么,所以我要说一些我还没有看到的东西

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

我不确定你的最终目标是什么,所以我要说一些我还没见过的话

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

以下是对您的代码的修复,改动最少:

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());

以下是对您的代码的修复,改动最少:

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());

它的解释远远超过了问题所在

所以要修复它,只需更改定义arrayLength方法的行

更改此行:
this.arrayLength=func…


对此:
this.create.arrayLength=func…

已经在问题所在的上面进行了很好的解释

所以要修复它,只需更改定义arrayLength方法的行

更改此行:
this.arrayLength=func…


对此:
this.create.arrayLength=func…

您是否尝试过
console.log(MyObject.create(value.arrayLength();)?这看起来很复杂,你到底想做什么?使用:
console.log(foo.arraylelength())您是否尝试过
console.log(MyObject.create(value.arrayLength();)?这看起来很复杂,你到底想做什么?使用:
console.log(foo.arraylelength())这不起作用。您需要在第一行添加括号:
var foo=(new MyObject.create()
以避免错误(因为
MyObject.create
未定义;您正在尝试调用
new MyObject
返回的对象的方法)。但是第二行不起作用,因为
foo
没有定义,因为
create()
没有返回值我的错。这行不通。您需要在第一行添加括号:
var foo=(new MyObject.create()
以避免错误(因为
MyObject.create
未定义;您正在尝试调用
new MyObject
返回的对象的方法)。但是第二行不起作用,因为
foo
没有定义,因为
create()
没有返回值我的错。