Javascript 如何使用构造函数&x27;将值插入到对象的输出?
我为一个半径值的圆创建了一个构造函数,两个用于计算面积和周长的函数,我试图将面积和周长的计算值作为要构造的对象的元素传递,但它不起作用Javascript 如何使用构造函数&x27;将值插入到对象的输出?,javascript,oop,Javascript,Oop,我为一个半径值的圆创建了一个构造函数,两个用于计算面积和周长的函数,我试图将面积和周长的计算值作为要构造的对象的元素传递,但它不起作用 function Circle (r) { this.radius = r; this.area = function () { var a = Math.PI * this.radius * this.radius; // tried this
function Circle (r) {
this.radius = r;
this.area = function () {
var a = Math.PI * this.radius * this.radius;
// tried this
this.areaaaa = a;
};
this.perimeter = function(){
var p = Math.PI * this.radius * 2;
// tried this too
this.perimeterrrr = p;
};
};
var x = new Circle(5);
console.log(x);
// output is {radius:5, area: [function], perimeter: [function]}
// desired output is {radius:5, area: [function],areaaa:78.54, perimeter: [function], perimeterrrr:31.42}
问题是这些函数定义中的代码永远不会运行。试试这个
function Circle (r) {
this.radius = r;
this.a = Math.PI * this.radius * this.radius;
this.p = Math.PI * this.radius * 2;
};
var x = new Circle(5);
console.log(x);
问题是这些函数定义中的代码永远不会运行。试试这个
function Circle (r) {
this.radius = r;
this.a = Math.PI * this.radius * this.radius;
this.p = Math.PI * this.radius * 2;
};
var x = new Circle(5);
console.log(x);
你可以用
你可以用
但是为什么呢?如果以后更改半径,对象将具有不一致的值。现在,您正在定义名为
区域
和周长
的方法,但从未调用这些方法。你真的想让它们成为getter吗?我想你没有明白我的意思,我想做的只是以自动方式将面积和周长的计算值作为另一个对象值传递,而不是手动键入每个计算值value@apsillers是的,我也想让他们成为能手和计算器,如果那样的话sense@aspillers如果我说的没有道理,检查我想要的输出,为什么?如果以后更改半径,对象将具有不一致的值。现在,您正在定义名为区域
和周长
的方法,但从未调用这些方法。你真的想让它们成为getter吗?我想你没有明白我的意思,我想做的只是以自动方式将面积和周长的计算值作为另一个对象值传递,而不是手动键入每个计算值value@apsillers是的,我也想让他们成为能手和计算器,如果那样的话sense@aspillers如果我所说的没有意义,请检查我想要的输出。请注意:Object.defineProperty
自ES5以来就存在;这不是ES6的新功能。@apsillers感谢您提供的信息!文档很混乱,从ECMAScript 6开始,您还可以使用计算属性名称的表达式绑定到给定函数。我猜它们是指将函数用作值属性的{get:
键,该键引用了{get prop(){…}
对象文字的语法,与对象无关。defineProperty
。ES6允许您在对象文字上使用运行时计算的属性名。只需注意:对象。defineProperty
从ES5开始就存在;这不是ES6的新功能。@apsillers感谢您提供的信息!文档从ECMAScript 6中,还可以使用计算属性名称的表达式绑定到给定函数。我猜它们是指{get:
键,该键将函数用作值属性,该键引用{get prop(){…}
对象文本上的语法,与对象无关。defineProperty
。ES6允许您在对象文本上使用运行时计算的属性名。我不明白这些函数中的代码从未运行过意味着什么,如果是这样,我该如何运行它们?@Adam这意味着您不运行这些函数。想象一下,如果您从未运行过这些函数,会是什么意思新圆圈(5)
。您是否希望Circle
中的代码在您不告诉它运行的情况下运行?您必须运行函数,否则函数中的代码不会运行。对于要运行的this.area和this.periment中的行,您需要在var x=new Circle(5)之后添加对x.area
或x.periment
的调用
。之后,将设置x.areaaaa和x.perimeterrrr。如果我执行x.radius=9
,会发生什么情况?a
和p
不会更新。这些属性应该在get方法期间计算感谢Shaun和apsillers的帮助解释。我不明白这些函数中的代码是什么意思er正在运行,如果是,我该如何运行它们?@Adam这意味着你不运行函数。想象一下如果你从未运行过new Circle(5)
。您是否希望Circle
中的代码在您不告诉它运行的情况下运行?您必须运行函数,否则函数中的代码不会运行。对于要运行的this.area和this.periment中的行,您需要在var x=new Circle(5)之后添加对x.area
或x.periment
的调用
。之后,将设置x.areaaaa和x.PerimeterRR。如果我执行x.radius=9
,会发生什么情况?a
和p
不会更新。这些属性应该在get方法期间进行计算。感谢Shaun和apsillers的帮助解释