是否有Java 8流操作限制(可能是无限的)Stream
直到第一个元素无法匹配谓词?
在Java 9中,我们可以使用takeWhile
下面的示例来打印小于10的所有数字.
IntStream
.iterate(1, n -> n + 1)
.takeWhile(n -> n < 10)
.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
由于Java 8中没有这样的操作,以一般方式实现它的最佳方法是什么?
我知道prototype
JavaScript函数对象的属性被复制到使用该函数作为构造函数实例化的对象的内部[[Prototype]]
属性(也称为__proto__
).所以,我可以将此属性设置为我想要充当原型的任何对象:
function Foo() {}
Foo.prototype = {
toString: function() { return "I'm a Foo!"; }
}
new Foo().toString()
// --> "I'm a Foo!"
Run Code Online (Sandbox Code Playgroud)
看起来普遍的做法是添加应该作为类方法的函数来处理新生成的函数的现有原型,如下所示:
function Bar() {}
Bar.prototype.toString = function() {
return "I'm a Bar!";
}
new Bar().toString()
// --> "I'm a Bar!"
Run Code Online (Sandbox Code Playgroud)
但是,我不清楚该物业的初始价值是多少prototype
.
function Baz() {}
Baz.prototype
// --> Baz {
// constructor: function Baz() {},
// __proto__: Object
// }
Run Code Online (Sandbox Code Playgroud)
该评论显示了Chrome的JavaScript控制台打印的内容.这是否意味着我创建的每个函数实际上都创建了两个对象?一个用于功能本身(constructor
)和一个用于其原型?
这是在ECMAScript标准中的某个地方定义的吗?我试图找到它但不能.所有浏览器都以同样的方式处理这个问题吗?