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