当我已经设置它们时,为什么对象属性将变为未定义

时间:2013-02-04 09:49:59

标签: javascript oop object prototype

function detail(){
  this.html = this.name;
}

var detail1 = new detail();
detail1.name = 'xyz';
console.log(detail1.html);

上面的代码将undefined作为输出。但我已经将名字命名为'xyz';我是面向对象的JavaScript 的新手。请帮忙。

2 个答案:

答案 0 :(得分:3)

这是因为nameundefined时通过复制初始化html属性。

解决方案是在构造函数中传递它:

function detail(name){
  this.name = name;
  this.html = this.name;
}

var detail1 = new detail();
console.log(detail1.html);

另一个解决方案是使html成为一个函数:

function detail(){
}
detail.prototype.html = function(){
   return this.name;
}
var detail1 = new detail();
detail1.name = 'xyz';
console.log(detail1.html()); // <- notice the parenthesis here : html is a function

第三个是在更改html时更改name

function detail(){
}
detail.prototype.setName = function(name){
   this.html = name;
}
var detail1 = new detail();
'xyz';
detail1.setName('xyz');
console.log(detail1.html);

答案 1 :(得分:0)

将名称作为参数传递给函数。目前,当创建详细对象的新实例时,其name属性未定义。它是在调用构造函数之后设置的,为时已晚。

function detail(name){
  this.html = "<li><a href='#'>"+name+"</a><a>"+"<li>";
}

var detail1 = new detail('xyz');
console.log(detail1.html);