相关疑难解决方法(0)

什么'var that = this;' 用JavaScript表示?

在JavaScript文件中,我看到:

function Somefunction(){
   var that = this; 
   ... 
}
Run Code Online (Sandbox Code Playgroud)

声明that和分配给它的目的是什么this

javascript this

346
推荐指数
4
解决办法
11万
查看次数

如何用Traceur在ES6类中实现私有方法

我现在使用Traceur Compiler来获得ES6功能.

我想从ES5实现这些东西:

function Animal() {
    var self = this,
        sayHi;

    sayHi  = function() {
        self.hi();
    };

    this.hi = function() {/* ... */}
}
Run Code Online (Sandbox Code Playgroud)

目前traceur不支持privatepublic关键字(来自和谐).ES6类语法不允许在类体中使用简单var(或let)语句.

我找到的唯一方法是在类声明之前模拟私有.就像是:

var sayHi = function() {
    // ... do stuff
};

class Animal {
...
Run Code Online (Sandbox Code Playgroud)

没有什么比通过预期的更好,this没有apply-ing或bind-ing它每次都不能将正确的方法传递给私有方法.

那么,是否有可能在ES6类中使用与traceur编译器兼容的私有数据?

javascript class ecmascript-5 ecmascript-6 traceur

134
推荐指数
8
解决办法
19万
查看次数

JavaScript OOP:日志记录的实现

我编写了以下代码,通过使用OOP在单独的js文件logger.js中实现日志记录.

var console;

function Logger() {
    init();
}

var init = function() {
    if(!window.console){ 
        console = {
            log: function(message){},
            info: function(message){},
            warn: function(message){},
            error: function(message){}
        }; 
    } else {
        console = window.console;
    }
};

Logger.prototype.log = function(message) {
    console.log(message);    
}

Logger.prototype.logInfo = function(message) {
    console.info(message);
}

Logger.prototype.logWarn = function(message) {
    console.warn(message);
}

Logger.prototype.logError = function(message) {
    console.error(message);
}
Run Code Online (Sandbox Code Playgroud)

我从另一个js文件,site.js使用它作为:

var logger = new Logger(); //global variable

var getComponentById = function(id) {
    var component = null;

    if(id) {
        try {
            component …
Run Code Online (Sandbox Code Playgroud)

javascript oop

6
推荐指数
1
解决办法
519
查看次数

Javascript OOP - 私有/公共方法

Helo那里,

只是一个简单的问题,我正在使用伪经典模式在JS中创建对象,我想知道如何实际创建只能在对象内部访问的私有方法.

假设我想在对象Animal中添加一个私有方法XY().这种模式是否允许我创建私有方法?

function Animal(name) {
  this.name = name
}

Animal.prototype = {
  canWalk: true,
  sit: function() {
    this.canWalk = false
    alert(this.name + ' sits down.')
  }
}
Run Code Online (Sandbox Code Playgroud)

先谢谢你,Alex

javascript oop

5
推荐指数
0
解决办法
88
查看次数

如何在Javascript类中从"私有方法"访问"公共变量"

首先,请参阅我的代码plz.

function test(){

    this.item = 'string';

    this.exec = function(){
        something();
    }

    function something(){
        console.log(this.item);
        console.log('string');
    }
}
Run Code Online (Sandbox Code Playgroud)

我做了类并调用'exec函数',就像这段代码一样

var t = new test();

t.exec();
Run Code Online (Sandbox Code Playgroud)

但结果是......

undefined
string
Run Code Online (Sandbox Code Playgroud)

我想从一些函数访问test.item.

你有什么解决方案吗?

javascript html5

4
推荐指数
1
解决办法
1281
查看次数

在构造函数中向原型添加属性

我正在尝试一些示例,并遇到一个问题,如果我们想要向原型添加一个函数,它将无法访问构造函数的私有成员.我遇到了这个解决方案.这似乎是一个很好的黑客.

我尝试了其他一些方法,我得到以下内容:

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
Run Code Online (Sandbox Code Playgroud)

解决方案似乎很奇怪,因为我们在构造函数中添加了原型.(我没有看到太多这个).它至少适用于firefox 5和chrome.它有什么问题吗?

javascript constructor prototype-programming

2
推荐指数
1
解决办法
6696
查看次数

在JavaScript中编写对象方法的最佳方法是什么?

OOP建议只公开您希望用户能够访问的变量和方法.我一直在为我的对象使用公共方法声明(即原型).

DrawShape = function() {

}

DrawShape.prototype.circle = function() {
    // draw logic here
}

DrawShape.prototype.square = function() {
    // draw logic here
}
Run Code Online (Sandbox Code Playgroud)

这种方法似乎是最有效的,因为每次实例化实例时都不会重写该方法.但是我发现要创建好的DRY,模块化代码我必须创建仅供其他方法访问的方法(即私有方法).

DrawShape = function() {

}

DrawShape.prototype.circle = function() {
    var colour = this.setColour();
    // draw logic here
}

DrawShape.prototype.square = function() {
    var colour = this.setColour();
    // draw logic here
}

DrawShape.prototype.setColour = function() {
    return "blue";
}
Run Code Online (Sandbox Code Playgroud)

在这里,我创建了一个名为setColour的方法,该方法仅用于由其他方法运行.问题是该方法是公开的,可以被任何人或任何人调用.

我可以将方法移动到对象构造函数中...但这意味着我不再保存内存(即每次实例化实例时都会重写),这也意味着我必须移动所有其他方法进入构造函数.

在创建对象时,JavaScript中的最佳实践是什么?

javascript prototype object

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