gpt4 book ai didi

javascript - Object.create 使用构造函数创建对象

转载 作者:行者123 更新时间:2023-12-03 11:35:15 25 4
gpt4 key购买 nike

我正在学习 Javascript,我是一名 C++ 程序员。我尝试使用 object.create 使用构造函数创建对象,结果如下:

var PlayGround ={
initGrid : function(N) {
this.N=N;

this.grid = new Array(N);
for (var i = 0; i < N; i++) {
this.grid[i] = new Array(N);
for (var j = 0; j < N; j++) {
this.grid[i][j] = false;
}


}
return true;

}
};

var PlayGround_property = {
N:{
value: 100,
writable:true
},
grid:{
value:null,
writable:true
}

}

var board= Object.create(PlayGround, PlayGround_property);

它按我想要的方式工作:对象板包含对象网格,现在我可以使用 set 和 get 关键字来定义 = 和 () 运算符的行为。不管怎样,我在网上读到了

this

Javascript 中的关键字不安全,我想确保它始终引用板对象而不是全局窗口对象。有什么办法还是我想太多了?其他问题,是否有其他方法可以在 Javascript 中使用构造函数(可能还有其他成员)编写对象?

最佳答案

I want to be sure that [this] is referring always to the board object

函数的this是通过调用函数的方式或绑定(bind)来设置的。因此,只需确保以正确的方式调用方法即可。如果您始终将函数作为 board 的方法调用,则方法中的 this 将始终引用 board

如果您只想拥有一个 board 实例,那么使用构造函数似乎没有多大意义。如果您有多个 board 实例,那么您希望 this 引用调用该方法的特定实例,因此您不想修复 this> 使用绑定(bind)

Crockford 只是不喜欢使用 new,因此鼓励 Object.create,这符合他关于继承应该如何工作的想法。

您的模式可以重写为使用类似以下的构造函数:

function PlayGround (N) {
this.N = N;
this.grid = []; // Use array literal, it's less to type

for (var i = 0; i < N; i++) {
this.grid[i] = [];

for (var j = 0; j < N; j++) {
this.grid[i][j] = false; // Not sure why you bother with this
}
}
}

var board = new Playground(100);

我不太确定你在做什么,但应该很接近。请注意,javascipt 是松散类型的,因此只有在需要分配有用的内容时才初始化变量和属性。变量是用未定义的值创建的,只有当您实际向它们分配某些内容时才会创建数组属性,创建长度为 N 的数组不会创建任何索引,例如

var arr = new Array(10);
console.log(arr.length); // 10
console.log(arr.hasOwnProperty(0)); // false

关于javascript - Object.create 使用构造函数创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26545786/

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