遍历原型中的对象

我知道如何在javascript中循环烘焙对象I。但是,当我尝试在对象的原型中执行此操作时,我收到“未定义不是函数”错误。我的代码如下

var createObject = function(strIn) {
  this.result = strIn;
}

createObject.prototype.toObject = function() {
  var objData = this.result.split('&');
  this.result = Object.create(null); //{}
  var res = Object.create(null);
  objData.forEach(function(value, index) {
    var test = value.split('=')
    return res[test[0]] = test[1];
  });
  this.result = res;
  res = Object.create(null);
  return this.result;

}

createObject.prototype.toString = function() {
  //{ jake: 'dog', finn: 'human' }
  //"jake=dog&finn=human"
  var key,
    objIn = Object.create(null),
    returnresult = '';
  objIn = this.result; //this is causing issue
  console.log('obj', objIn);
  console.log(typeof(objIn))
  for (key in objIn) {
    console.log(objIn.hasOwnProperty('key')) //trying to see wht this results in ::GIVES 'undefined is not a function error'
      //     if(objIn.hasOwnProperty(key)){
      //       returnresult += key+'='+objIn[key]+'&'
      //     }
  }
  this.result = returnresult;
  returnresult = Object.create(null);
  return this.result;
}


var test = new createObject('jake=dog&finn=human');

console.log(test);
console.log(test.toObject())
console.log(test);
console.log(test.toString());
console.log(test);

结果和错误如下:

{ result: 'jake=dog&finn=human' } 
{ jake: 'dog', finn: 'human' } 
{ result: { jake: 'dog', finn: 'human' } } 
obj { jake: 'dog', finn: 'human' } 
object 
solution.js:52 
    console.log(objIn.hasOwnProperty('key')  ) 
                      ^ 
TypeError: undefined is not a function 
    at createObject.toString (solution.js:52:23) 
    at solution.js:68:18 

这不是拼写错误,所以不确定发生了什么..

谢谢 ..

Ifch0o1

对象是引用类型。

Object.create(null)返回没有原型的真正空对象。例如:

var emptyObj = Object.create(null)
emptyObj.hasOwnProperty // Return undefined.
emptyObj.prototype // Return undefined.

所以:

createObject.prototype.toObject = function() {
  var objData = this.result.split('&');
  this.result = Object.create(null); //{}
  var res = Object.create(null);
  objData.forEach(function(value, index) {
    var test = value.split('=')
    return res[test[0]] = test[1];
  });

  // Here you say - this.result = res
  // But it's reference type, so the address of this variable will be
  // Setted to `this`
  this.result = res;

  // here you change the reference value of res.
  // so this.result will be = Object.create(null) after next line exec.
  res = Object.create(null);

  return this.result;

}

我认为这是问题所在。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章