2014-10-03 63 views
1

的我開始使用原型構造函數初始化和我得到了預期的結果,如果我使用的代碼:入門「未定義」當一個屬性在原型

$(document).ready(function() { 
    var MyObject = new MyClass(); 

    MyObject.assign(); 

    MyObject.console(); 
}); 

function MyClass() { 
    var myProperty; 
}; 

MyClass.prototype = { 

    assign: function() { 
     this.myProperty = 'Hello world!'; 
    }, 

    console: function() { 
     console.log(this.myProperty); // Shows 'Hello world!' 
    } 
}; 

但下面的代碼返回undefined。我不明白爲什麼,有誰能幫助我嗎?

$(document).ready(function() { 
    var MyObject = new MyClass(); 

    MyObject.console(); 
}); 

function MyClass() { 
    var myProperty = 'Hello world!'; 
}; 

MyClass.prototype = { 

    console: function() { 
     console.log(this.myProperty); // Shows 'undefined' 
    } 
}; 
+0

'var'聲明一個* local *變量。 – elclanrs 2014-10-03 21:59:27

回答

5

在第一段代碼,實際上創建和定義屬性:this.myProperty = 'Hello world!';而在此之前,這個屬性不存在。

在第二段代碼中,您從不定義屬性。

將其更改爲:

function MyClass() { 
    //NOT "var", but "this." 
    this.myProperty = 'Hello world!'; 
}; 

另一種方式來做到這一點(如果該值myProperty應該默認爲一定的價值,就是把它的原型:

MyClass.prototype = { 

    //Now all instantiations will have this preset  
    myProperty: "Hello World", 

    console: function() { 
     console.log(this.myProperty); 
    } 
}; 
+0

很清楚,謝謝! – 2014-10-03 22:21:55

-1

試試這個: http://jsfiddle.net/csdtesting/d369Lw0f/

根據這個約objects and prototype

$(document).ready(function() { 
 
    var MyObject = new MyClass(); 
 
    MyObject.console(); 
 
}); 
 

 
function MyClass() { 
 
    this.myProperty = 'Hello world!'; 
 
}; 
 

 
MyClass.prototype.console = function() { 
 
    //console.log(this.myProperty); 
 
    document.write(this.myProperty); 
 
};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

希望它能幫助!

+0

請解釋下投票。它正在工作。 @馬喬西芒 – 2014-10-03 22:18:27