Javascript 对象';s的价值与原型问题

Javascript 对象';s的价值与原型问题,javascript,Javascript,我试图创建一个新类,但它似乎不起作用。代码如下: <script> var myClass = function(arg){ return new init(arg); } var init = function(arg){ return arg; } init.prototype.prop = true; </script> myClass('foo')返回['foo'],但是myClass('foo').prop变成未定义的。有人知道怎么解决吗 编辑

我试图创建一个新类,但它似乎不起作用。代码如下:

<script>
var myClass = function(arg){
    return new init(arg);
}
var init = function(arg){
    return arg;
}
init.prototype.prop = true;
</script>
myClass('foo')
返回
['foo']
,但是
myClass('foo').prop
变成
未定义的
。有人知道怎么解决吗

编辑:我想或多或少像jQuery一样创建这个类。
例如:
$('div')
直接返回一个值(在本例中为所有div标记),但不返回具有存储该值的属性的对象

如果从函数返回值并尝试使用
new
关键字,则返回值将不会是新实例化的对象,而是返回
后面的值。因此,在您的情况下,返回的是“foo”字符串,而不是您期望的新对象。

如果您从函数返回一个值,并尝试使用
new
关键字,则返回值将不是新实例化的对象,而是
return
后面的值。因此,在您的情况下,“Foo”字符串正在返回,而不是您期望的新对象。

< P>如果要创建新类,则可能要考虑此模式:

var MyClass =function(arg) {
    this.init(arg);
};
MyClass.prototype = {
    init: function(arg) {
        // Do something with that arg
        this.someArg = arg;
    },
    myProperty: 'Hell world',
    someArg: null   
};

var myVar = new MyClass('Some arg');
测试结束:

console.log(myVar.myProperty);
console.log(myVar.someArg);

检查:

如果你想创建一个新类,你可能想考虑这个模式:

var MyClass =function(arg) {
    this.init(arg);
};
MyClass.prototype = {
    init: function(arg) {
        // Do something with that arg
        this.someArg = arg;
    },
    myProperty: 'Hell world',
    someArg: null   
};

var myVar = new MyClass('Some arg');
测试结束:

console.log(myVar.myProperty);
console.log(myVar.someArg);

检查它:

当您调用
new init()
并且在
init()
中返回一个非对象时,它会生成
init
的实例,而不是返回的值

如果从
init()
函数返回一个数组,则返回该数组;但是数组没有考虑您的
init
原型:)

另见:

如果希望像数组一样,可以执行以下操作:

function myClass(arg) {
    return new init(arg);
}
function init(arg) {
    this.push(arg);
}
init.prototype = [];
init.prototype.foo = true;

var x = new init('foo');
console.log(x) // ["foo"]
console.log(x.foo) // true

它使
init
数组
原型继承(即
[]
)。之后,您可以根据需要向
init
原型添加更多属性和方法。

当您调用
new init()
并在
init()
中返回一个非对象时,它会生成
init
的实例,而不是返回值

如果从
init()
函数返回一个数组,则返回该数组;但是数组没有考虑您的
init
原型:)

另见:

如果希望像数组一样,可以执行以下操作:

function myClass(arg) {
    return new init(arg);
}
function init(arg) {
    this.push(arg);
}
init.prototype = [];
init.prototype.foo = true;

var x = new init('foo');
console.log(x) // ["foo"]
console.log(x.foo) // true
它使
init
数组
原型继承(即
[]
)。之后,您可以根据需要向
init
原型添加更多属性和方法。

在您的代码中:

> <script>
> var myClass = function(arg) {
>   return new init(arg);
> }
> var init = function(arg){
>   return arg;
> }
>
> init.prototype.prop = true;
> </script>
>
调用
myClass('foo')
时,将字符串传递给
init
,该字符串被称为构造函数。然后该函数尝试返回字符串,但是作为构造函数调用的函数将始终返回对象。如果您尝试返回一个基本体,它将返回它的this对象。这在报告中没有很清楚的说明。但它就在那里

然后我尝试了以下代码:

var init = function(arg){
    return [arg];//Now init returns an array
}
var init=函数(arg){ return[arg];//现在init返回一个数组

因为数组是对象,所以返回的就是对象

> }
> 
myClass('foo')返回['foo'],但随后返回myClass('foo')。prop 变成未定义的。有人知道如何解决吗

因为构造函数返回的是数组,而不是它的this对象。返回的数组继承自代码中的
array.prototype
,而不是
init.prototype

> <script>
> var myClass = function(arg) {
>   return new init(arg);
> }
> var init = function(arg){
>   return arg;
> }
>
> init.prototype.prop = true;
> </script>
>
当您调用myClass('foo')时
,您将一个字符串传递给
init
,该字符串被称为构造函数。然后该函数尝试返回该字符串,但是被称为构造函数的函数将始终返回一个对象。如果您尝试返回一个基元,它将返回它的this对象。中没有非常明确的说明。但它确实存在

然后我尝试了以下代码:

var init = function(arg){
    return [arg];//Now init returns an array
}
var init=函数(arg){ return[arg];//现在init返回一个数组

因为数组是对象,所以返回的就是对象

> }
> 
myClass('foo')返回['foo'],但随后返回myClass('foo')。prop 变成未定义的。有人知道如何解决吗


因为您的构造函数返回的是一个数组,而不是它的this对象。返回的数组继承自
array.prototype
,而不是
init.prototype

您真的希望构造函数返回与您传入的值相同的值吗?这只是一个示例。例如,它可以返回一个乘以2的数字example@MarkLinus
$('div')
不返回值,它返回一个object不管怎样,我想返回这个对象,但不是用文字属性,而是用数字属性(像数组一样工作)并具有可由声明的方法/属性。prototype@MarkLinus看到我的答案了吗?你真的希望构造函数返回与你传入的值相同的值吗?这只是一个例子。例如,它可以返回一个乘以2的数字example@MarkLinus
$('div')
不返回值,它返回一个object不管怎样,我想返回这个对象,但不是用文字属性,而是用数字属性(像数组一样工作)并具有可由声明的方法/属性。prototype@MarkLinus查看我的答案谢谢你的回答,但现在它抛出了
TypeError:string不是函数
我不确定你是如何得到它的。函数是类。如果你想创建
myClass
的实例,你不应该在函数(或至少不带返回值)。上面的函数返回一个
init
实例,但它不返回;它返回原始参数。我已更新了问题,以便更好地解释我想要的内容。请查看it@Steve-return语句不正确。作为构造函数调用的函数总是返回一个对象。如果您尝试o返回字符串(或任何其他非对象),它将返回其this obje