最初のレッスンはスコープです。Javascriptプロトタイプとスコープの操作
var scope = "global";
function Scope() {
var scope = "local";
this.s = function() { return scope; }
}
var instance = new Scope();
console.log(instance.scope); ///this is 'undefined'
console.log(instance.s()); /// this is 'local'
これはクロージャの世界では理にかなっています。
次に、BaseScope
が導入されました。
function BaseScope() {
this.scope = "parent";
this.h = function() {return "Hello";}
}
Scope.prototype = Object.create(BaseScope);
はだから今、私はScope
にBaseScope
のプロトタイプを追加したいです。以下は、私がを受け取りたいと考えていますが返されます。
var instance2 = new Scope();
console.log(instance2.s()); ///Should be returning 'local' because it is the fastest returned s() function on the object's prototype.
console.log(instance2.scope); ///Should be returning BaseScope's scope, since it is technically the only defined 'scope' property up the chain.
console.log(instance2.h()); ///Should return "Hello"
最後の例では、私は完全に間違って何かをやっていると思わせるundefined
を返しています。上記の効果を得るためには、どのような措置を取る必要がありますか?
あなたが 'にconsole.log(instance2.scope)で何を得るのですか;'? –
@KubaWyrostek undefined –
あなたの 'BaseScope'は決して実際には呼び出されません。 'scope'プロパティは決して' instance2'に割り当てられません。 'BaseScope'関数はプロトタイプとして扱うオブジェクトでもあります。 –