我已经阅读了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的简单转换就足够了.
使用有什么好处
var foo = [];
Run Code Online (Sandbox Code Playgroud)
过度使用
var bar = new Array();
Run Code Online (Sandbox Code Playgroud)
我被告知在新的Array()上使用[]但从来没有太多解释
我正在阅读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) 刚读完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"是一个人,她会建议什么?
另外:当克罗克福德说一个特定的设计模式"比另一个更具表现力"时,他的意思是什么?
我们假设我有以下对象构造函数:
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对象.
这是有史以来一个好主意?如果是的话,何时?何时(和为什么)避免这种技术是明智的?
我来自传统的Web开发人员背景,在这里我无法宣称对Javascript有任何了解,但我正在努力.
我目前对JQuery的理解是一个相当新手的理解,对闭包的理解稍微好一些,而且我已经阅读过了,并且觉得我对Douglas Crockford的"Javascript:The Good Parts"非常清楚.
我最近一直在构建一些相当javascript密集的页面,我对结果非常满意.需要注意的一点是,我设法完成了几乎没有全局函数的整个事情,甚至没有使用new运算符.
事实上,从我对上述书籍的阅读中,操作员什么也做不了你不能做的另一种更简单的方法,并迫使你破解'this'变量.
那么有什么我想念的吗?新操作符实际上是出于某种目的还是仅仅是一种让OO程序员在功能语言中感到舒适的技巧?我会更好地从我的JS词汇中完全打击它吗?
我看过一个视频,其中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中实现观察者模式:
我的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) 有一个老技巧(我在SO上学到的)将一个构造函数作为函数调用,即忘记new关键字.以下,或类似的东西,它位于顶部的每个构造函数中.
if (!(this instanceof arguments.callee)) {
throw Error("Constructor called as a function");
}
Run Code Online (Sandbox Code Playgroud)
需要时有哪些替代方案"use strict";?
它的通用性质可以保留吗?或者我们必须使用构造函数的名称来代替arguments.callee?
通过以下问题阅读,我觉得大多数答案都忽略了为什么有些人(Crockford)选择不使用"新"关键字.这不是为了防止在没有"new"关键字的情况下意外调用函数.
根据Crockford关于原型继承的以下文章,他实现了一种对象创建技术,该技术更清楚地展示了JS的原型性质.现在甚至在JS 1.8.5中实现了这种技术.
他反对使用新的论点可以更清楚地概括为:
"这种间接性旨在使语言对经过专业训练的程序员来说更加熟悉,但却没有做到这一点,正如我们从Java程序员对JavaScript的非常低级的看法中看到的那样.JavaScript的构造函数模式并不适合经典人群.也模糊了JavaScript真正的原型性质.因此,很少有程序员知道如何有效地使用这种语言."
我并不一定认为"新"有害,但我确实认为它"掩盖了JavaScript真正的原型性质",因此我在这一点上必须同意Crockford.
您对使用"更清晰"的原型对象创建技术,而不是使用"new"关键字有什么看法?
javascript ×9
arguments ×1
constructor ×1
jquery ×1
jsfiddle ×1
json ×1
object ×1
strict-mode ×1