gpt4 book ai didi

javascript - 你能初始化一个函数吗? - Javascript

转载 作者:行者123 更新时间:2023-11-30 13:53:08 25 4
gpt4 key购买 nike

我这里有这个函数,我需要在另一个文件中使用另一个名为 OrderRepository 的函数。

ma​​in.js

function main() {

var orderRepo = new OrderRepository();

// Your code here

}

orderrepository.js

function OrderRepository() {

}

OrderRepository.prototype.getYesterdaysOrders = function
getYesterdaysOrders() {
var yesterdaysOrders = [{ array of objects }],

return yesterdaysOrders;
};

这些是作为示例使用的,1 个问题分为 2 个部分:

1) var orderRepo = new OrderRepository();

你能像这样初始化一个函数吗?

2) 在orderrepository.js中:

function OrderRepository() {

}

ma​​in.js 中被调用,但里面没有任何东西,这是在作业中按原样给出的,这只是一个错字,他们真的打算把所有东西都扔进那个函数或我错过了什么吗?

它不应该是这样的吗?

预期

function OrderRepository() {

OrderRepository.prototype.getYesterdaysOrders = function

getYesterdaysOrders() {

var yesterdaysOrders = [{ array of objects }],

return yesterdaysOrders;

};
}

最佳答案

深入研究 JavaScript,这门语言很难理解。 JavaScript 并不是真正的 OOP(恕我直言),至少它没有实现常见的 OOP 概念。有人称它为基于对象的语言。没有类(class)。最近的 ECMA 脚本标准确实实现了 class 关键字,但是,它是语法糖。与 new 关键字一起使用,它构建的对象与您可以通过“构造函数”实现的对象相同。

JavaScript 中的一切都是对象,甚至数字和函数也是如此。每个函数都可以充当构造函数。 new 关键字调用构造函数,将新创建的空对象作为函数的 this 上下文。该功能可以做它想做的事。如果它不返回任何内容,它的 this 上下文将由 new 表达式返回。

因为没有类,所以没有继承。一些类似继承的行为是通过原型(prototype)概念实现的。在大多数情况下,构造函数不会返回任何内容,有时会通过添加属性来修改 this 对象。方法是持有函数对象的属性。构造函数调用的 new 上下文中的对象将具有原型(prototype)对象引用作为 __proto__ 属性。这是由 new 运算符从被调用构造函数的 prototype 属性复制的。默认为空对象。

// empty constructor function
function OrderRepository() {

}

// define a function property on the constructor's prototype object
OrderRepository.prototype.getYesterdaysOrders = function
getYesterdaysOrders() {
var yesterdaysOrders = [ /* array of objects */ ],

return yesterdaysOrders;
};

// create an empty object with a `__proto__` property holding a
// reference to the object { getYesterdaysOrders: function(){/*code*/} }
var obj = new OrderRepository();

现在,当尝试调用方法 obj.getYesterdaysOrders() 时,JavaScript 将查看 obj 中是否定义了这样的属性。如果没有,则查看obj.__proto__中是否有引用,并在obj.__proto__的属性中搜索属性名。如果没有,则重复相同的步骤,直到找到它或链中的 __proto__ 属性为 null。由于定义了 obj.__proto__.getYesterdaysOrders,因此检查它是否是可调用函数对象,并最终使用 objthis 上下文调用,因为我们调用了 obj.getYesterdaysOrders()。否则会抛出错误。

注意:即使主流浏览器公开了 __proto__ 属性,它也不是标准的一部分。不要直接使用它(开发时调试除外),更重要的是:不要操纵它。如果您确实需要在构造后获取或操作对象实例的原型(prototype)(__proto__),请使用内置Object 对象的方法。

根据您的最后一次编辑:您预期的代码将在每次实例化(以及构造函数调用)时在 prototype 中定义一个新的函数对象。这不是你想要的,这只是不必要的开销。

关于javascript - 你能初始化一个函数吗? - Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57838519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com