gpt4 book ai didi

javascript - 为什么我必须在 OOP Javascript 中使用 constructor.prototype?

转载 作者:搜寻专家 更新时间:2023-11-01 05:30:29 24 4
gpt4 key购买 nike

我正在学习 OOP Javascript,我想知道为什么我需要使用 constructor.prototype 功能。我不能像这样把我需要的所有功能都放在构造函数中吗:

function Class(){
this.x = x;
this.y = y;
this.--- = ---;
}

而不是:

function Class(){
this.x = x;
}

Class.prototype = {
constructor : Class,
y : y
}

最佳答案

在原型(prototype)中定义您的方法/属性将允许它们在实例之间共享。在构造函数中定义它们会为每个实例创建一个新实例。

您不必使用原型(prototype)...如果您想共享数据,请使用它。通常,您将方法放在原型(prototype)上(因为它们不会更改)并在实例本身上设置值。


需要注意的一件事是在原型(prototype)上定义可变属性,这通常会导致错误。我已经在 Understanding prototypal inheritance 中发布了相关信息

function Class(){}   
Class.prototype = { obj : {}};

var a = new Class();
a.obj.x = 5;

var b = new Class();
console.log(b.obj.x); // 5

所以您通常应该在构造函数中定义对象(如果您不想共享它们);

 function Class(){ 
this.obj = {};
}

var a = new Class();
a.obj.x = 5;

var b = new Class();
console.log(b.obj.x); // undefined

请注意,这对于基元来说不是问题,因为它们不能被改变,将它们设置在一个实例上只会隐藏原型(prototype)中的值。

function Class(){}   
Class.prototype = { val : 5};

var a = new Class();
console.log(a.val); // 5
a.val = 6;
console.log(a.val); // 6

var b = new Class();
console.log(b.val); // 5

关于javascript - 为什么我必须在 OOP Javascript 中使用 constructor.prototype?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30893617/

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