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

时间:2016-01-29 06:47:28

标签: javascript jquery foreach constructor javascript-objects

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返回undefined。

如果我将this.k = v;更改为this[k] = v;并在内执行console.log(this.model) 每个循环,控制台将返回“Polo undefined”并且console.log($polo);仍然返回undefined。

有什么想法吗?

Code Screengrab

这是小提琴:
https://jsfiddle.net/JCJWebDesign/zztqyvf4/1/

3 个答案:

答案 0 :(得分:0)

你没有从函数中返回任何内容。

&#13;
&#13;
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);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

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);

$.each this不是新创建的对象,jQuery说 - &#34;关键字this指的是元素。&#34;

所以你应该做的是将this分配给另一个变量。让我们说self并使用它。而且你不必返回任何东西 (自我或者这个),JS负责那个

工作FIDDLE

答案 2 :(得分:0)

在当前对象中分配对象属性基本上是个问题。这是正确的代码,它可以工作。

 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);