如何使用变量作为构造函数属性?

How to use a variable as constructor property?

function Volkswaggen($options) {

  $.each($options, function(k,v) {
    this.k = v;
  });
}
/* ============================== */

var $polo = new Volkswaggen({model: "Polo", doors: 3});

console.log($polo.model); // << I want this to return "Polo"

$polo.model returns 未定义。

如果我将 this.k = v; 更改为 this[k] = v; 并在每个循环中执行 console.log(this.model) ,控制台 returns "Polo undefined" 和 console.log($polo); 也仍然 returns 未定义。

有什么想法吗?

Code Screengrab

这是 fiddle:
https://jsfiddle.net/JCJWebDesign/zztqyvf4/1/

你return没有任何功能。

function Volkswaggen($options) {     
  var temp = this;
  $.each($options, function(k, v) {       
    temp[k] = v;
  });
}

/* =========================================== */

var $polo = new Volkswaggen({model: "Polo", doors: 3});

console.log($polo.model);
alert($polo.model);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

function Volkswaggen($options) {
    var self = this;
    $.each($options, function(k, v) {
        self[k] = v;
    });    
}

/* =========================================== */

var $polo = new Volkswaggen({model: "Polo", doors: 3});

console.log($polo.model);

里面$.eachthis不是新建的对象,jQuery表示-"the keyword this refers to the element."

所以你应该做的是将 this 分配给另一个变量。让我们说 self 并改用它。而且你不需要 return 任何东西 (self or this), JS 负责

工作FIDDLE

在当前对象中分配对象 属性 基本上是个问题。这是正确的代码并且有效。

 function Volkswaggen($options) {
   for (var k in $options) {
        if ($options.hasOwnProperty(k)) {
          this[k] = $options[k];
        }
      }    
    }

var $polo = new Volkswaggen({model: "Polo", doors: 3});
console.log($polo);
console.log($polo.model);
console.log($polo.doors);