gpt4 book ai didi

javascript - 有没有办法访问原型(prototype)函数中对象的所有值?

转载 作者:行者123 更新时间:2023-12-04 07:18:00 25 4
gpt4 key购买 nike

我正在学习 javascript,我遇到了这种情况,我自己无法弄清楚。
假设我创建了一个这样的构造函数,它试图模仿一个数组:

// constructor function
function myArray() {
for (let i = 0; i < arguments.length; i++) {
this[`${i}`] = arguments[i];
}
this.length = arguments.length;
}

let fruits = new myArray('apple', 'mangoes', 'banana');
这将创建对象 fruits像这样:
myArray {0: "apple", 1: "mangoes", 2: "banana", length: 3}
0: "apple"
1: "mangoes"
2: "banana"
length: 3
现在,我想为 myArray 创建自己的函数可以访问 fruits 的所有值对象,所以我可以用它执行一些操作。喜欢, reverse功能例如:
myArray.prototype.reverse = function () {
//how do i access all elements/values of friuts here?
};
我可以设置 this.args = arguments;在构造函数内部
并访问原型(prototype)函数中的 args 以对其进行处理。
但它仅限于原始对象。如果我将来通过使用另一个函数向我的对象添加更多元素,那么它将无法工作,因为它只从原始对象中获取 args。
有没有办法在原型(prototype)函数中传递当前对象?
编辑:
正如 Tushar Shahi 提到的,我们可以通过反转原始参数来实现反转功能。但是我们如何才能访问稍后添加到对象中的元素。这是完整的代码,只是为了让你们有一个清晰的理解。

// constructor function
function myArray() {
this.args = Array.from(arguments);
for (let i = 0; i < arguments.length; i++) {
this[`${i}`] = arguments[i];
}
this.length = arguments.length;
}
let fruits = new myArray("apple", "mangoes", "banana");

// reverse function
myArray.prototype.reverse = function () {
// reversing the arguments first then assigning values
this.args = this.args.reverse();
for (let i = 0; i < this.args.length; i++) {
this[i] = this.args[i];
}
// but how do i access all elements/values of friuts here and not just the arguments?
}

// add/push function
myArray.prototype.add = function (a) {
let index = this.length;
this[index] = a;
this.length++;
}

// pop function
myArray.prototype.pop = function (a) {
let index = this.length - 1;
delete this[index];
this.length--;
}

fruits.add("orange"); // orange is added to fruits
fruits.add("pineapple"); // pineapple is added to fruits

console.log('fruits.reverse() ...', fruits.reverse());
console.log({ fruits }); // myArray {0: "banana", 1: "mangoes", 2: "apple", 3: "orange", 4: "pineapple", args: Array(3), length: 5}
.as-console-wrapper { min-height: 100%!important; top: 0; }

正如您在最后一个 console.log 中看到的那样,我只能反转最初传递的 3 个参数,但不能反转后来添加的元素。
菠萝应该是倒转后的第一个水果。所以问题是
我们如何访问稍后在 reverse 函数中添加的元素?或者
我们如何在 reverse 函数中访问当前的水果对象?

最佳答案

如果您将初始参数的副本保留为数组,它应该可以工作。argumentsarray-like object ,不完全是一个数组。所以必须转换。
另外,不要忘记反转 args属性(property)本身。因此,当您多次使用它时它会起作用。

function myArray() {
this.args = Array.from(arguments);
for (let i = 0; i < arguments.length; i++) {
this[i] = arguments[i];
}
this.length = arguments.length;
}

let fruits = new myArray('apple', 'mangoes', 'banana');

myArray.prototype.reverse = function () {
this.args = this.args.reverse();
let j = 0;
for (let i = 0; i < this.args.length; i++) {
this[i] = this.args[i];
}
};

fruits.reverse();
fruits.reverse();

关于javascript - 有没有办法访问原型(prototype)函数中对象的所有值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68680444/

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