对象的价值和原型问题
Object's value and prototype issue
我正在尝试创建一个新类,但它似乎不起作用。代码如下:
<script>
var myClass = function(arg){
return new init(arg);
}
var init = function(arg){
return arg;
}
init.prototype.prop = true;
</script>
问题是myClass('foo')
没有按预期返回'foo'
。相反,它返回init
。然后我尝试了以下代码:
var init = function(arg){
return [arg];//Now init returns an array
}
myClass('foo')
返回['foo']
,但随后myClass('foo').prop
变成undefined
。有谁知道如何解决它?
编辑:我想像jQuery一样或多或少地创建这个类。例如:$('div')
直接返回一个值(如果是所有div 标记),但不返回具有存储此值的属性的对象
当你调用new init()
并在init()
内返回一个非对象时,它会生成一个init
的实例,而不是返回的值。
如果从init()
函数返回 Array,则会返回该数组;但 Array 不会考虑init
原型:)
另请参阅:https://stackoverflow.com/a/1978474/1338292
如果你想像一个数组,你可以这样做:
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
继承自Array
原型(即 []
)。之后,您可以根据需要向init
原型添加更多属性和方法。
在你的代码中:
> <script>
> var myClass = function(arg) {
> return new init(arg);
> }
> var init = function(arg){
> return arg;
> }
>
> init.prototype.prop = true;
> </script>
>
问题是myClass('foo')没有按预期返回'foo'。相反 它返回 init。然后我尝试了以下代码:
如果编写为函数声明(更常见),您的代码可能会更清晰:
function myClass(arg) {
return new init(arg);
}
function init(arg) {
return arg;
}
当你调用myClass('foo')
时,你把一个字符串传递给init
,这被称为构造函数。然后,该函数尝试返回字符串,但是作为构造函数调用的函数将始终返回一个对象。如果您尝试返回基元,它将返回其 this 对象。ECMA-262 中没有非常明确地说明。但它就在那里。
然后我尝试了以下代码:
var init = function(arg) { 返回 [参数];现在 init 返回一个数组
因为数组是一个对象,所以这就是返回的内容。
> }
>
myClass('foo') 返回 ['foo'],但随后 myClass('foo').prop 变成未定义。有谁知道如何解决它?
因为构造函数返回一个数组,而不是它的 this 对象。返回的数组继承自Array.prototype
,而不是init.prototype
。
如果从函数返回值并尝试将 new
关键字与它一起使用,则返回值将不是新实例化的对象,而是return
后面的值。 因此,在您的情况下,将返回"foo"字符串,而不是您期望的新对象。
创建新类,则可能需要考虑以下模式:
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);
看看吧: http://jsfiddle.net/4zwpm/
- 使用setInterval调用原型函数时出现问题
- 基本对象/原型语法问题
- Javascript继承的问题&基类原型
- JavaScript 将数组推送到类原型问题
- 是否存在替换Javascript构造函数的问题'原型,而不是添加到原型中
- Javascript和原型继承问题
- 实时Magento网站上的原型JS问题
- Magento - 原型.js和jQuery问题 - 添加到购物车按钮
- 使用函数原型的 JavaScript 继承问题
- 对象的价值和原型问题
- Javascript原型继承问题
- 原型遗传的敲除问题
- Javascript:使用原型函数时出现问题
- 选择器原型等库中的“这个”问题
- 这个原型缓冲解码有什么问题
- JavaScript中的原型问题
- NodeJS模块.导出对象原型问题
- JavaScript原型问题
- Javascript构造函数和原型问题
- 简单的javascript原型问题