gpt4 book ai didi

javascript - javascript构造函数的细节

转载 作者:行者123 更新时间:2023-11-30 10:41:29 25 4
gpt4 key购买 nike

假设我有一个纯构造函数(只包含 this.Bar = bar)

1) 当我从另一个函数调用它时,我可以在调用时直接传递调用函数的参数还是必须做 var myBar=new bar, myBar.Bar=thebar,其中 bar是调用方参数吗?

2) 即使没有得到所有的参数,构造函数仍然会实例化吗?

3) 我如何检查其中一个参数是否是唯一的,IE 没有其他对象实例具有相关属性的这个值?具体来说,我想在创建时为每个对象分配一个唯一索引。也许数组?

提前致谢

最佳答案

Say I have a pure constructor function (containing nothing but this.Bar = bar)

我假设你的意思是:

function MyConstructor(bar) {
this.Bar = bar;
}

(注意:JavaScript 中压倒性的约定是属性名称以小写字母开头。所以 this.bar,而不是 this.Bar。首字母大写的标识符通常为构造函数保留。)

1) When I call it from another function, can I pass the caller function's arguments directly when I call or must I do var myBar=new bar, myBar.Bar=thebar, where the bar is a caller argument?

你可以直接传递它们:

function foo(a, b, c) {
var obj = new MyConstructor(b);
}

2) Will the constructor still instantiate even if it doesn't get all the args?

JavaScript 引擎不检查传递的参数数量。调用函数时,您未传递的任何形式参数都将具有值 undefined:

function MyConstructor(bar) {
console.log(bar);
}
var obj = new MyConstructor(); // logs "undefined"

3) How can I check if one of the args is unique, IE no other instance of the object has this value for the property in question? Specifically, I want to assign each object a unique index at creation. Maybe array?

一般来说,这通常不在构造函数的范围内。但是,是的,您可以使用数组或对象来做到这一点。

var knownBars = [];
function MyConstructor(bar) {
if (knownBars.indexOf(bar) !== -1) {
// This bar is known
}
else {
// Remember this bar
knownBars.push(bar);
}
}

当然,indexOf 可能不是您要搜索的内容,因此您可能需要使用 Array.prototype 的其他方法或您自己的循环。

另一种方法是使用对象;这假设 bar 是一个字符串或可以有用地转换成字符串的东西:

var knownBars = {};
function MyConstructor(bar) {
if (knownBars.indexOf(bar) !== -1) {
// This bar is known
}
else {
// Remember this bar
knownBars[bar] = 1;
}
}

关于javascript - javascript构造函数的细节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10802914/

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