javascript新手,尝试理解返回函数的函数
我试图了解这里发生了什么:javascript新手,尝试理解返回函数的函数,javascript,Javascript,我试图了解这里发生了什么: if (!Object.create) { Object.create = (function () { var F = function(){}; return function (o) { if (arguments.length !== 1) { throw new Error('Object.create implementation only accepts one parameter.');
if (!Object.create) {
Object.create = (function () {
var F = function(){};
return function (o) {
if (arguments.length !== 1) {
throw new Error('Object.create implementation only accepts one parameter.');
}
F.prototype = o;
return new F();
};
}());
}
F.prototype是什么意思。。。返回函数是如何工作的
function dostuff() {
return function () {console.log('hello')}
}
f = dostuff();
f();
--output:--
hello
Initialy F是空函数,new F()返回空对象,即{} 之后
F.prototype = o
F as类获取对象o的属性
例如,如果o={a:1},则new F()返回{a:1}
这与将F定义为相同
F = function(){
this.a = 1;
}
但在您的示例中,您可以根据传递给create()函数的object o类创建新对象,这是两个独立的问题。原型的概念及其含义与返回函数的概念是分开的。我会尽力解释 F.prototype是什么意思? Javascript不支持传统意义上的继承,而是使用原型继承将对象属性从一个函数传递到另一个函数 默认情况下,所有Javascript对象都包含一个prototype字段。prototype字段最初总是设置为基本对象。(您可以通过执行以下操作创建对象的新实例:
var x=new Object()
或通过执行var x={}
)可以创建将原型设置为另一个对象的对象,从而访问放置在原型上的方法和属性
让我们通过一个例子来说明
假设您创建了一个构造函数来创建一个Bird对象
function Bird(name) {
var me = this;
this.name = name;
this.flying = false;
this.fly = function() { me.flying = true; };
}
Bird.prototype.fly = function() { this.flying = true; }
Bird.prototype.land = function() { this.flying = false; }
如果我们查看此对象的详细信息(您可以使用console.dir(obj)或使用Chrome开发工具来执行此操作):
现在考虑创建另一个实现对象BID的Boin对象。你会这样做的
function Duck(name) {
this.name = name;
this.quack = function() {
console.log("quack");
}
}
如果查看此对象的详细信息,您会看到:
现在如果你想让鸭子飞起来,你还没有一个方法。您需要将鸭子的原型设置为鸟。你可以这样做:
function Duck(name) {
this.name = name;
this.quack = function() {
console.log("quack");
}
}
Duck.prototype = new Bird();
现在,当您查看对象的详细信息时,您将看到原型现在设置为bird
简言之,原型用于提供对象之间的代码重用。来自面向对象背景的程序员可以使用原型提供与继承相同的机制。Mozilla有一个深入研究的好方法
返回函数是如何工作的?
Javascript是一种函数式编程语言。函数式编程范式的原则之一是将存在函数作为第一类对象。除其他外,这意味着函数与任何其他对象的处理方式相同
返回函数的函数与返回字符串的函数没有什么不同
function getString() {
return "I am a string";
}
您可以选择任何方式使用此函数的结果。返回函数的函数也是这样
function getFunctionToGetSomethingImportant() {
return function() {
return "I am something important";
}
}
现在,当您想要获得一个返回函数的函数,该函数执行一些重要的操作时,您可以执行以下操作:
var x = getFunctionToGetSomethingImportant();
x();
尽管这些用例没有什么价值,但使用函数作为第一类对象是非常有价值的。函数可以像其他对象一样处理,这意味着它们可以作为参数传递给其他函数(一个称为高阶函数的概念)
函数过滤器(列表、函数(元素){
返回元素<0;
});
函数过滤器将采用元素参数的函数作为其第二个参数。过滤器的一个实现将遍历列表中的每个元素,并应用作为第二个参数的函数。这是函数作为第一类对象的许多重要用例的一个示例。本文包含更多信息。“F.prototype是什么意思……返回函数如何工作”这是两个截然不同的问题。你在问什么?欢迎来到函数式编程!!!要了解更多信息,请参见此链接-检查此处
-1
-此答案实际上没有解释任何问题,只是一堆代码碰巧使用了前面提到的一些语言功能。在函数原型中定义属性与在函数中定义属性不同,使用this
。对,不完全相同。这将覆盖原型属性和方法。this.prototype=newbird(name)代码>是错误的。它应该是Duck.prototype
,并且应该放在构造函数之外。您并不是在这里真正设置原型。您只是在创建的对象上创建一个名为prototype
的属性。
function Duck(name) {
this.name = name;
this.quack = function() {
console.log("quack");
}
}
function Duck(name) {
this.name = name;
this.quack = function() {
console.log("quack");
}
}
Duck.prototype = new Bird();
function getString() {
return "I am a string";
}
function getFunctionToGetSomethingImportant() {
return function() {
return "I am something important";
}
}
var x = getFunctionToGetSomethingImportant();
x();
function filter(list, function(element) {
return element < 0;
});