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()
没有返回值代码>我的错。