Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
';自我';用ruby和';这';在javascript中_Javascript_Ruby - Fatal编程技术网

';自我';用ruby和';这';在javascript中

';自我';用ruby和';这';在javascript中,javascript,ruby,Javascript,Ruby,我熟悉ruby并开始学习javascript。跳过去学习“这个”是安全的,并把它看作是JavaScript中Ruby的“自我”的完全等价物,而JavaScript中的“Apple”与Ruby? 如果没有,它们之间有什么大的区别呢?self被广泛应用于 书中: Ruby代码的每一行都在一个对象内执行,即所谓的 当前对象。当前对象也称为self,因为 您可以使用self关键字访问它 在给定的时间内,只有一个对象可以扮演自我,但没有 对象长期担任该角色。特别是当你打电话给 方法,则接收器变为自我。从那

我熟悉ruby并开始学习javascript。跳过去学习“这个”是安全的,并把它看作是JavaScript中Ruby的“自我”的完全等价物,而JavaScript中的“Apple”与Ruby?
如果没有,它们之间有什么大的区别呢?

self
被广泛应用于

书中:

Ruby代码的每一行都在一个对象内执行,即所谓的 当前对象。当前对象也称为self,因为 您可以使用self关键字访问它

在给定的时间内,只有一个对象可以扮演自我,但没有 对象长期担任该角色。特别是当你打电话给 方法,则接收器变为自我。从那一刻起,所有的例子 变量是self的实例变量,所有方法都被调用 没有一个明确的接受者,他们自己被召唤。只要你的代码 显式地调用另一个对象上的方法,即另一个对象 变成自我

例如:

class Foo

  attr_reader :name

  def initialize(name)
    @name = name  
  end

  # here self indicates the class itself Foo
  def self.bar
  end

  # here self indicates the instance of class Foo
  def baz
    self.name
  end
end
现在:

虽然在JavaScript中,关键字的使用功能强大且独特,但它并不是像上面所示的Ruby那样引用对象(在ES5的严格模式下)<代码>此可以有任何值。在任何给定函数调用中,
this
的值取决于函数的调用方式(而不是函数的定义位置,即上下文,如Ruby、C#或Java等语言)。但是,与Ruby的
self
类似,
这个
不能在执行期间通过赋值进行设置。例如:

class Foo

  attr_reader :name

  def initialize(name)
    @name = name  
  end

  # here self indicates the class itself Foo
  def self.bar
  end

  # here self indicates the instance of class Foo
  def baz
    self.name
  end
end
全局上下文():

或作为对象方法:

var foo = {};
foo.bar = function() {
  console.log(this.firstName);
};
foo.firstName = 'FooBar';
foo.bar(); // "FooBar"
从所展示的示例中可以很清楚地看出,JavaScript的
this
并不是Ruby的
self
的堂兄弟,但它们的行为是否有一些相似之处


为了进一步探索Ruby的
self
和JavaScript的
this
JavaScript的“this”值可以更改为任何值,默认情况下,“this”引用直接父级。(因此全局范围中的函数将引用窗口对象。)

这是一个武断的例子,但应该充分说明这一点。当您调用myFunc()之类的函数时,它是表示myFunc.call()的快捷方式。.call()接受的第一个参数是“this”的值

查看此处查看更多待命信息:


我将此作为一条评论发布,因为我不会详细讨论所有差异,但您需要学习JavaScript中的“this”。它的处理方式不同于Ruby的
self
,在这方面,它不同于大多数其他语言中的
this
self
等价物。JavaScript使用词法范围定义,其中包含一些关于如何创建范围的相当复杂的规则;默认值与显式绑定等。。。首先,当您将self用作定义的一部分时,如果您正在创建一个类方法,请查看这里的官方文档。例如,
def self.foo。。。结束
以澄清-
此={}
在JS中无效,因此不能通过赋值更改
。但是,
this
可以为函数/方法的任何给定运行提供:
f=function(){console.log(this);};f、 调用({})/*
var foo = {};
foo.bar = function() {
  console.log(this.firstName);
};
foo.firstName = 'FooBar';
foo.bar(); // "FooBar"
function foo() {
  console.log(this);
}

foo(); // this will log out the window object

var bar = {
  fname: 'Edy',
  sayHello: function() {
    alert('Hello ' + this.fname);
  },
  baz: function() {
   console.log(this);
  }
}

bar.baz(); // will log out the 'bar' object

var person = {
  fname: 'Danny'
}

var person2 = {
  fname: 'Elenore'
}

function sayHello() {
    alert('Hello ' + this.fname);
}

sayHello.call(person); // will alert 'Danny'
sayHello.call(person2); // will alert 'Elenore'