function detail(){
this.html = this.name;
}
var detail1 = new detail();
detail1.name = 'xyz';
console.log(detail1.html);
上面的代码将undefined
作为输出。但我已经将名字命名为'xyz';我是面向对象的JavaScript 的新手。请帮忙。
答案 0 :(得分:3)
这是因为name
是undefined
时通过复制初始化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);