我試圖分配使用下面的一個命名空間中的原型,(一切都被包裹在一個全局對象):使用命名空間將原型對象分配給對象中的匿名函數,這是未定義的?
prototypeObjects:{
Person : function(config){
var that = this;
this.name = config.name;
this.age = config.age;
console.log(that);
that.prototype.working = function(){
console.log(this.name + 'is working');
};
},
},
我然後在控制檯中使用它來檢查它:
var me = new global.prototypeObjects.Person({name:'Mike',age:'40'});
這給這個錯誤:但不能設置屬性未定義
'工作',我若在指定的原型,即是明確的:
類型錯誤
prototypeObjects:{
Person : function(config){
var that = this;
this.name = config.name;
this.age = config.age;
console.log(that);
**global.prototypeObjects.Person**.prototype.working = function(){
console.log(this.name + 'is working');
};
}
},
然後它按預期工作,我得到以下內容:
global.prototypeObjects.Person {名: 「邁克」,年齡 「40」,工作:功能}
和me.working()註銷 '邁克正在'
有人可以解釋爲什麼我在這種情況下不能使用'this'?
標記爲正確的細節和外部鏈接。現在完美工作,謝謝你,先生! –
+1,但在構造函數中使用「var」與是否創建閉包無關。閉包是創建超出封閉範圍的功能的結果。 – RobG
@RobG閉包是函數的返回值,該函數具有與其關聯的環境,以適應函數中聲明的變量,並且函數返回時var不會超出範圍。如果我有'var name =「」'親自創建一個新人(),那麼返回的是一個閉包,因爲一個環境與人關聯以使'name'可用。 – HMR