我正在試驗一些例子,並且遇到了一個問題,如果我們想向原型添加一個函數,它將無法訪問構造函數的私有成員。我遇到了this解決方案。這似乎是一個很好的黑客。在構造函數中向原型添加屬性
我嘗試了一些其他的方式,我有以下幾點:因爲我們要添加到構造函數中的原型
var Restaurant = function()
{
var myPrivateVar;
var private_stuff = function() // Only visible inside Restaurant()
{
return "I can set this here!";
}
Restaurant.prototype.use_restroom = function() // use_restroom is visible to all
{
private_stuff();
}
Restaurant.prototype.buy_food = function() // buy_food is visible to all
{
return private_stuff();
}
}
var restaurant = new Restaurant();
restaurant.buy_food(); // this would work
restaurant.private_stuff(); // this won't
的解決方案似乎不可思議。 (我沒有看到太多這個)。它至少適用於firefox 5和chrome。它有什麼問題嗎?
謝謝你的好解釋和評論。每次創建對象時,我完全錯過了重新定義原型中方法的觀點。我早先看了一下模塊化模式。但是我面臨的問題是,每次我打電話給'restaurantMaker'時,我都會得到'use_restroom'和'buy_food'的新實例。這是不需要的,即如果可以將它們添加到原型中,它們可以被共享。 –
問題是,如果一個函數在與這些私有變量相同的範圍內定義,則該函數只能訪問私有變量。所以如果你只定義了一次函數,他們要麼必須共享相同的私有變量,要麼他們將無法訪問。如果你最終擁有100個餐館對象,這只是一個真正的問題。 – Skilldrick