我在某处找到了以下代码,但我没有正确理解这些代码。
ArticleVote.submitVote('no');return false;
ArticleVote 是一个类,submitVote() 是那个类的函数吗?
或者上面的代码是什么意思? jQuery 或传统 JavaScript 中有类和对象的概念吗?如何创建它们?请分享一些引用链接或代码。
最佳答案
与其他声称的纯 OOP 语言相反。函数也是对象,但它们也可以是对象的构造函数。
var ObjectCreator = function () {
};
上面是一个函数,如果调用得当,它会创建一个对象。 适当调用 意味着您必须使用 new 运算符:
var obj = new ObjectCreator;
因此,虽然 JavaScript 本身没有类,但有模拟该行为的方法。例如:
class Foo {
public void bar() {}
}
Foo foo = new Foo();
相当于下面的JS代码:
var Foo = function () {
// constructor
};
Foo.prototype.bar = function () {}
var foo = new Foo;
当您想使用继承时,真正的区别就来了,这是一种不同类型的继承(原型(prototype))。因此,给定两个伪类 Foo 和 Bar,如果我们希望 Bar 从 Foo 扩展,我们必须这样写:
var Foo = function () {};
var Bar = function () {};
Bar.prototype = new Foo; // this is the inheritance phase
var bar = new Bar;
alert(bar instanceof Foo);
虽然构造函数很有用,但有时我们只需要该对象的一个实例。编写一个构造函数然后用属性和方法填充它的原型(prototype)在某种程度上是乏味的。所以 JavaScript 有对象字面量,它们是某种哈希表,只是它们是自觉的。 self-conscious 我的意思是他们知道 this 关键字。对象字面量是实现单例模式的好方法。
var john = {
age : 24,
isAdult : function () {
return this.age > 17;
}
};
上面,使用构造函数等同于:
var Person = function (age) {
this.age = age;
};
Person.prototype.isAdult = function () {
return this.age > 17;
};
var john = new Person(24);
prototype 东西怎么样正如许多人所说,在 JavaScript 中对象继承自对象。这件事有一些有用的方面,其中之一可以称为 寄生继承(如果我没记错的话,Douglas Crockford 提到这个的上下文)。不管怎样,这个原型(prototype)概念与原型(prototype)链的概念有关,类似于经典OO语言中的父->子链。所以,继承的东西。如果在 foo 对象上调用了 bar 方法,但该对象没有 bar 方法,则开始成员查找阶段:
var Baz = function () {};
Baz.prototype.bar = function () {
alert(1);
};
var Foo = function () {};
Foo.prototype = new Baz;
var foo = new Foo;
/*
* Does foo.bar exist?
* - yes. Then execute it
* - no
* Does the prototype object of the constructor function have a bar
* property?
* - yes. Then execute it
* - no
* Is there a constructor function for the prototype object of
* the initial construct function? (in our case this is Baz)
* - yes. Then it must have a prototype. Lookup a bar
* member in that prototype object.
* - no. OK, we're giving up. Throw an error.
*/
foo.bar();
经典 OO 继承与基于原型(prototype)的继承之间存在一个关键区别。当对象从对象继承时,它们也继承状态。举个例子:
var Person = function (smart) {
this.smart = smart;
};
var Adult = function (age) {
this.age = age;
};
Adult.prototype = new Person(true);
var john = new Adult(24);
alert(john.smart);
我们可以说john是一个匿名人的寄生虫,因为它无情地吸食着这个人的智慧。此外,鉴于上述定义,所有 future 的成年人都会很聪明,不幸的是,这并不总是正确的。但这并不意味着对象继承是一件坏事。只是一个工具,和其他任何东西一样。我们必须按我们认为合适的方式使用它。
在经典的 OO 继承中,我们不能执行上述操作。我们可以使用静态字段来模拟它。但这会使该类的所有实例对该字段具有相同的值。
关于javascript - jQuery 或 JavaScript 有类和对象的概念吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1073864/
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev
我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss
好的,所以我的目标是轻松地将一些数据保存到磁盘以备后用。您如何简单地写入然后读取一个对象?所以如果我有一个简单的类classCattr_accessor:a,:bdefinitialize(a,b)@a,@b=a,bendend所以如果我从中非常快地制作一个objobj=C.new("foo","bar")#justgaveitsomerandomvalues然后我可以把它变成一个kindaidstring=obj.to_s#whichreturns""我终于可以将此字符串打印到文件或其他内容中。我的问题是,我该如何再次将这个id变回一个对象?我知道我可以自己挑选信息并制作一个接受该信
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
我在Rails工作并有以下类(class):classPlayer当我运行时bundleexecrailsconsole然后尝试:a=Player.new("me",5.0,"UCLA")我回来了:=>#我不知道为什么Player对象不会在这里初始化。关于可能导致此问题的操作/解释的任何建议?谢谢,马里奥格 最佳答案 havenoideawhythePlayerobjectwouldn'tbeinitializedhere它没有初始化很简单,因为你还没有初始化它!您已经覆盖了ActiveRecord::Base初始化方法,但您没有调
我有一个服务模型/表及其注册表。在表单中,我几乎拥有服务的所有字段,但我想在验证服务对象之前自动设置其中一些值。示例:--服务Controller#创建Action:defcreate@service=Service.new@service_form=ServiceFormObject.new(@service)@service_form.validate(params[:service_form_object])and@service_form.saverespond_with(@service_form,location:admin_services_path)end在验证@ser
下面例子中的Nested和Child有什么区别?是否只是同一事物的不同语法?classParentclassNested...endendclassChild 最佳答案 不,它们是不同的。嵌套:Computer之外的“Processor”类只能作为Computer::Processor访问。嵌套为内部类(namespace)提供上下文。对于ruby解释器Computer和Computer::Processor只是两个独立的类。classComputerclassProcessor#Tocreateanobjectforthisc
rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送
我想让一个yaml对象引用另一个,如下所示:intro:"Hello,dearuser."registration:$introThanksforregistering!new_message:$introYouhaveanewmessage!上面的语法只是它如何工作的一个例子(这也是它在thiscpanmodule中的工作方式。)我正在使用标准的rubyyaml解析器。这可能吗? 最佳答案 一些yaml对象确实引用了其他对象:irb>require'yaml'#=>trueirb>str="hello"#=>"hello"ir