相关疑难解决方法(0)

如何在JQuery中使用JSFiddle echo功能?

我已经阅读了jsFiddle用户指南,了解他们的JSON echo功能,但没有运气生成一个有效的jsFiddle来使用JQuery回显JSON消息.

如何创建一个jsFiddle来回应他们的指南中的JSON:

data: {
    json: JSON.encode({
        text: 'some text',
        array: [1, 2, 'three'],
        object: {
            par1: 'another text',
            par2: [3, 2, 'one'],
            par3: {}
        }
    }),
    delay: 3
}
Run Code Online (Sandbox Code Playgroud)

提供的一个例子是我从未使用过的Mootools.因此,从mootools示例到JQuery的简单转换就足够了.

jquery json jsfiddle

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

在JavaScript中使用[]而不是新的Array()的优点

使用有什么好处

var foo = []; 
Run Code Online (Sandbox Code Playgroud)

过度使用

var bar = new Array();
Run Code Online (Sandbox Code Playgroud)

我被告知在新的Array()上使用[]但从来没有太多解释

javascript

19
推荐指数
2
解决办法
2139
查看次数

Javascript自动getter/setters(John Resig Book)

我正在阅读John Resig的" Pro Javascript Techniques ",我对一个例子感到困惑.这是代码:

// Create a new user object that accepts an object of properties
function User( properties ) {
  // Iterate through the properties of the object, and make sure
  // that it's properly scoped (as discussed previously)
  for ( var i in properties ) { (function(){
  // Create a new getter for the property
  this[ "get" + i ] = function() {
    return properties[i];
  };
  // Create a new setter for the property
  this[ "set" …
Run Code Online (Sandbox Code Playgroud)

javascript metaprogramming

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

伪古典与"JavaScript方式"

刚读完Crockford的" JavaScript:The Good Parts ",我对他在伪古典与原型方法上的立场有疑问.其实我对他的立场并不感兴趣; 我只是想了解他的论点,所以我可以建立自己的立场.

在这本书中,克罗克福德似乎可以推断,构造函数和"所有的爵士乐"不应该在JavaScript中使用,他提到如何"新"的关键字被严重实现 - 即非构造函数可以用"新"被称为关键字,反之亦然(可能导致问题).

我以为我知道他来自哪里,但我想我不知道.

当我需要创建一个新模块时,我通常会这样开始:

function MyModule(something) {
    this.something = something || {};
}
Run Code Online (Sandbox Code Playgroud)

然后我会为它的原型添加一些方法:

MyModule.prototype = {
    setSomething : function(){},
    getSomething : function(){},
    doSomething : function(){}
}
Run Code Online (Sandbox Code Playgroud)

我喜欢这个模特; 这意味着我可以在需要时创建一个新实例,它有自己的属性和方法:

var foo = new MyModule({option1: 'bar'});
// Foo is an object; I can do anything to it; all methods of the "class"
// are available to this instance.
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何使用更适合JavaScript的方法实现上述目标?换句话说,如果"JavaScript"是一个人,她会建议什么?

另外:当克罗克福德说一个特定的设计模式"比另一个更具表现力"时,他的意思是什么?

javascript

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

即使忘记了"新",我应该何时自动创建一个对象?

我们假设我有以下对象构造函数:

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

如果我在没有new关键字的全局范围内运行该函数,那么bar将在以下任何范围内设置Foo():

var foo = Foo(42);
console.log(bar); // 42
console.log(foo.bar); // ERROR
Run Code Online (Sandbox Code Playgroud)

所以我的想法是做这样的事情:

function Foo(bar) {
    if(!(this instanceof Foo)) {
        // return a Foo object
        return new Foo(bar);
    }
    this.bar = bar;
}
Run Code Online (Sandbox Code Playgroud)

这样,如果我做的new Foo(42) 还是 Foo(42),它会始终返回一个Foo对象.

这是有史以来一个好主意?如果是的话,何时?何时(和为什么)避免这种技术是明智的?

javascript object

16
推荐指数
2
解决办法
1142
查看次数

Javascript的新运营商做了什么,但让生活变得困难吗?

我来自传统的Web开发人员背景,在这里我无法宣称对Javascript有任何了解,但我正在努力.

我目前对JQuery的理解是一个相当新手的理解,对闭包的理解稍微好一些,而且我已经阅读过了,并且觉得我对Douglas Crockford的"Javascript:The Good Parts"非常清楚.

我最近一直在构建一些相当javascript密集的页面,我对结果非常满意.需要注意的一点是,我设法完成了几乎没有全局函数的整个事情,甚至没有使用new运算符.

事实上,从我对上述书籍的阅读中,操作员什么也做不了你不能做的另一种更简单的方法,并迫使你破解'this'变量.

那么有什么我想念的吗?新操作符实际上是出于某种目的还是仅仅是一种让OO程序员在功能语言中感到舒适的技巧?我会更好地从我的JS词汇中完全打击它吗?

javascript

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

如果Crockford建议我们将其用于原型继承,为什么不说使用new关键字呢?

我看过一个视频,其中Crockford告诉我们不要使用new关键字.如果我没弄错的话,他说要使用Object.create.new他写道:http://javascript.crockford.com/prototypal.html他为什么告诉我们不要使用它是否已经用它来实现原型继承?

我希望他使用Object.create而不是new像这样:

function object(o) {
    return Object.create((function() {}).prototype = o);
}
Run Code Online (Sandbox Code Playgroud)

那为什么他仍然使用new

javascript

15
推荐指数
2
解决办法
2062
查看次数

如何在javascript中实现观察者模式?

嗨,我想在JavaScript中实现观察者模式:

我的index.js:

$(document).ready(function () {
  var ironMan = new Movie();
  ironMan.setTitle('IronMan');
  ironMan.setRating('R');
  ironMan.setId(1);
  //  ironMan.setCast(['Robert Downey Jr.', 'Jeff Bridges', 'Gwyneth Paltrow']);

  var terminator = new Movie();
  terminator.setTitle('Terminator');
  terminator.setRating('P');
  terminator.setId(2);

  console.log(ironMan.toString());
  console.log(terminator.toString());

  ironMan.play();
  ironMan.stop();
  ironMan.download();
  ironMan.share('V. Rivas');

  console.log(ironMan.getCast()[0]);
});
Run Code Online (Sandbox Code Playgroud)

我的电影:

var title;
var rating;
var id;
var observers;


function Movie() {
  observers = new ObserverList();
}

//function Movie (title, rating, id){
//  this. title = title;
//  this.rating =  rating;
//  this.id =id;
//  observers = new ObserverList();
//} …
Run Code Online (Sandbox Code Playgroud)

javascript design-patterns observer-pattern

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

这个instanceof arguments.callee的严格模式替代

有一个老技巧(我在SO上学到的)将一个构造函数作为函数调用,即忘记new关键字.以下,或类似的东西,它位于顶部的每个构造函数中.

if (!(this instanceof arguments.callee)) {
    throw Error("Constructor called as a function");
}
Run Code Online (Sandbox Code Playgroud)

需要时有哪些替代方案"use strict";

它的通用性质可以保留吗?或者我们必须使用构造函数的名称来代替arguments.callee

javascript constructor arguments strict-mode

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

JavaScript的"新"关键字是否被视为有害(第2部分)?

通过以下问题阅读,我觉得大多数答案都忽略了为什么有些人(Crockford)选择不使用"新"关键字.这不是为了防止在没有"new"关键字的情况下意外调用函数.

根据Crockford关于原型继承的以下文章,他实现了一种对象创建技术,该技术更清楚地展示了JS的原型性质.现在甚至在JS 1.8.5中实现了这种技术.

他反对使用新的论点可以更清楚地概括为:

"这种间接性旨在使语言对经过专业训练的程序员来说更加熟悉,但却没有做到这一点,正如我们从Java程序员对JavaScript的非常低级的看法中看到的那样.JavaScript的构造函数模式并不适合经典人群.也模糊了JavaScript真正的原型性质.因此,很少有程序员知道如何有效地使用这种语言."

我并不一定认为"新"有害,但我确实认为它"掩盖了JavaScript真正的原型性质",因此我在这一点上必须同意Crockford.

您对使用"更清晰"的原型对象创建技术,而不是使用"new"关键字有什么看法?

javascript

12
推荐指数
2
解决办法
2061
查看次数