相关疑难解决方法(0)

如何在构造函数中设置javascript私有变量?

假设我有一个调用的javascript函数/类Foo,它有一个名为的属性bar.我希望在bar实例化类时提供值,例如:

var myFoo = new Foo(5);
Run Code Online (Sandbox Code Playgroud)

将设为myFoo.bar5.

如果我创建bar一个公共变量,那么这是有效的,例如:

function Foo(bar)
{
    this.bar = bar;
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我想将其设为私有,例如:

function Foo(bar)
{
   var bar;
}
Run Code Online (Sandbox Code Playgroud)

那么我如何设置私有变量的值bar,使其可用于所有内部函数foo

javascript oop scope

17
推荐指数
2
解决办法
3万
查看次数

有人可以用对象解释奇怪的JavaScript吗?

我有以下课程

function Temp() { 
  var isHot=false; 
  return { 
    setHot: function(v) { isHot=v }, 
    getHot: function() { return isHot; },
    hot: isHot
  }
}
var w = new Temp();
w.setHot(true);

w.hot !== w.getHot()
Run Code Online (Sandbox Code Playgroud)

如果我通过函数访问w对象,为什么我只看到更改的值?

javascript

6
推荐指数
2
解决办法
86
查看次数

在原型继承中实现实例方法/变量

在阅读http://javascript.crockford.com/prototypal.html之后,我一直在玩原型继承,并且在理解如何以我使用经典继承的方式使用它时遇到了一些问题.也就是说,原型继承的所有函数和变量基本上都是静态的,除非它们被子对象覆盖.请考虑以下代码段:

var Depot = {   
    stockpile : [],
    loadAmmo : function (ammoType) {
        this.stockpile.push(ammoType);
    }
};

var MissileDepot = Object.create(Depot);
var GunDepot = Object.create(Depot);
Run Code Online (Sandbox Code Playgroud)

stockpileloadAmmo这绝对是在原型,因为这两个MissileDepot和GunDepot有他们.然后我们运行:

MissileDepot.loadAmmo("ICBM");
MissileDepot.loadAmmo("Photon Torpedo");

alert(MissileDepot.stockpile); // outputs "ICBM,Photon Torpedo"
alert(GunDepot.stockpile); // outputs "ICBM,Photon Torpedo"
Run Code Online (Sandbox Code Playgroud)

这是预期的,因为既没有MissileDepot也没有GunDepot实际拥有stockpileloadAmmo在他们的对象中,所以javascript查找继承链到他们的共同祖先.

当然我可以手动设置GunDepot的库存,正如预期的那样,解释器不再需要查找链条

GunDepot.stockpile = ["Super Nailgun", "Boomstick"];
alert(GunDepot.stockpile); // outputs "Super Nailgun,Boomstick"
Run Code Online (Sandbox Code Playgroud)

但这不是我想要的.如果这是经典继承(比如Java),loadAmmo将独立地操作MissileDepot和GunDepot的库存,作为实例方法和实例变量.我希望我的原型能够声明孩子们常见的东西,而不是他们分享的东西.

所以也许我完全误解了原型继承背后的设计原则,但我不知道如何实现我刚刚描述的内容.有小费吗?提前致谢!

javascript

5
推荐指数
1
解决办法
3837
查看次数

JavaScript中私有变量和实例变量的方法和变量范围

我试图弄清楚这一点或在谷歌上搜索它,我只能找到如何创建对象,而不是功能如何工作.如果有人能向我解释封装是如何工作的.

function myObject() {

    this.variable1 = "tst";

    this.function1 = function() {
        //Now this function works.  A 'this' function to a private function is ok
        _PrivateFunction1();

        //Here is error one, I cannot seem to call methods within the object
        //from.  
        this.function2();
    }

    this.function2 = function() {
        alert("look! function2!");
    }

    function _PrivateFunction1() {
        //This does work though.  I am confused.
        _PrivateFunction2();
    }

    function _PrivateFunction2() {
        alert("look! PrivateFunction1");

        //this does not work.
        alert(this.variable1);
    }
}
Run Code Online (Sandbox Code Playgroud)

javascript

3
推荐指数
1
解决办法
586
查看次数

标签 统计

javascript ×4

oop ×1

scope ×1