有人可以解释这段代码在做什么吗?调用Class.create()时会发生什么?

时间:2016-03-09 03:14:17

标签: javascript this

以下代码如何解释?我很难理解var F被声明为函数的事实,然后将F.prototype作为属性添加到该函数中。如何为函数添加属性或者可能是我错误地读取代码。任何有关解释或相关文章或示例的帮助都非常感谢。



String str = Arrays.stream(binary.split("(?<=\\G.{8})"))
  .map(s -> Integer.parseInt(s, 2)).map(i -> ""+(char)i)
  .collect(Collectors.joining(""));
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:0)

JavaScript中的函数实际上是一个对象,就像我们为对象分配属性一样,我们可以为函数指定属性,这里没有区别。另外,在调用函数时,如果提供了new关键字,则函数变为类constructor,并从函数创建新对象。此外,每个函数对象中都有一个名为prototype的特殊默认属性,它负责类中的inheritence

您提供的代码隐藏了创建类的复杂性,即在Class.create方法中,它将原型对象作为参数,然后在内部创建构造函数(从原型对象调用initialize方法) ,然后将原型对象分配给该函数。此外,它检查如果提供的原型对象不包含initialize方法,因为它在构造函数中使用该方法,则会引发错误。最后,在所有这些之后,返回构造函数,我们得到的实际上是一个JavaScript类,因此使用new关键字with with将创建该类的新对象。

答案 1 :(得分:0)

在这个例子中,默认的NowPlayingViewController方法(我不相信),require 'pty' describe "irb" do it "evaluates an expression" do PTY.spawn('irb') do |output, input| output.readpartial 1024 # read past the prompt input.puts "1 + 1" expect(output.readline.chomp).to eq("1 + 1") expect(output.readline.chomp).to eq("=> 2") end end end 方法作为新的...原型传递prototype ”。我以前从未真正看到这件事,但让我们看看一些例子。假设我们称之为类:

object

好的,现在create是我们对班级的引用,可以这样使用:

var t = Class.create(
  {
    initialize: function() {
      alert('Hello World!');
    },
    test: function(a) {
        alert(a);
    },
    test2: function(a, b) {
        alert(a + ' and ' + b);
    }
  }
);

会弹出“Hello world!”。有点不正统,但无论它有效。现在t函数动态调用t.prototype.initialize(); ,所以如果你这样做:

F()

它只会弹出“Hello”,或者您可以拥有多个参数并按照您的意愿使用它们:

arguments

当您创建对类t.prototype.test('Hello'); 的引用时,它实际上只是调用函数t.prototype.test2('Bacon', 'eggs'); ,但除非您在t中定义F()方法如果您传递给initialize()方法,则只会错误地说object

修改

在阅读完其他答案后,我尝试使用create关键字,实际上是否会创建该类并调用Uncaught TypeError: Cannot read property 'apply' of undefined方法:

new

然后,您可以通过调用方法或添加它们来将引用作为主对象处理:

initialize

但是,要小心,好像你没有在电话会议中加入额外的括号,你最终会得到我们之前所拥有的:

var t = new (Class.create({initialize: function() { alert('Hello World!'); }}));