我知道有几种方法可以创建对象,添加方法和属性等。 有一件事我不了解原型
function Obj () {
var msg = "message";
this.log = function (){
console.log(msg);
}
}
var o = new Obj();
o.log();
这会输出消息。但是使用原型
function Obj2 () {
var msg = "message2";
}
Obj2.prototype.log = function () {
console.log(msg);
}
var o2 = new Obj2();
o2.log();
将输出msg未定义。 那是为什么?
答案 0 :(得分:1)
msg
是一个范围分别为Obj
和Obj2
的变量。
第一个示例中的log
函数是在Obj
范围内定义的,因此它可以访问该范围内的变量。
第二个示例中的log
函数未在Obj2
的范围内定义,因此不会。{/ p>
答案 1 :(得分:0)
你有@Quentin提到的范围问题,但是如果你需要访问原型函数中的变量,你需要使用它并将其视为一个类。所以现在它将被视为Obj2类的属性而不是私有变量。
所以代码就像:
function Obj2 () {
this.msg = "message2";
}
Obj2.prototype.log = function () {
console.log(this.msg);
}
var o2 = new Obj2();
o2.log();