在该程序中,Complex.transform是独立函数还是Complex构造函数的属性?
关于Complex.transform的属性归属疑问解答
嘿,你的判断完全正确!Complex.transform确实是一个独立的工具函数,但准确来说它是挂载在Complex构造函数上的静态方法——它不需要通过new Complex()创建的实例来调用,直接用构造函数本身就能触发(比如你代码里的Complex.transform(first))。
在JavaScript里,函数本身也是对象,所以我们可以直接给函数对象添加属性。你代码里的Complex.transform = function(num) {...}这行,就是直接给Complex这个构造函数对象添加了一个名为transform的属性,属性值是一个函数。
这个函数的核心作用就是做类型统一:
- 如果传入的参数已经是
Complex实例,就直接返回它; - 如果传入的是普通数字,就创建一个实部为该数字、虚部为0的
Complex实例返回;
这样后续的complex_num_add函数就能统一处理Complex类型的对象,避免类型不匹配的问题。
举个对比:如果是Complex实例的方法,我们会把它定义在Complex.prototype上(比如Complex.prototype.add = function() {...}),调用时需要通过new Complex().add()这样的实例来触发,但transform是直接挂在构造函数上的静态方法,不需要实例就能使用。
附上你提供的完整代码:
function Complex(real, imaginary) { this.real = 0; this.imaginary = 0; this.real = (typeof real === 'undefined') ? this.real :parseFloat(real); this.imaginary = (typeof imaginary === 'undefined') ? this.imaginary : parseFloat(imaginary); this.name = "sagar"; } Complex.transform =function (num) { var complex; complex = (num instanceof Complex) ? num : complex; complex = (typeof num === 'number') ? new Complex(num, 0) : num; return complex; }; function display_complex(re, im) { if(im === '0') return '' + re; if(re === 0) return '' + im + 'i'; if(im < 0) return '' + re + im + 'i'; return '' + re + '+' + im + 'i'; } function complex_num_add(first, second) { var num1, num2; num1 = Complex.transform(first); num2 = Complex.transform(second); var real = num1.real + num2.real; var imaginary = num1.imaginary + num2.imaginary; return display_complex(real, imaginary); } var a = new Complex(2, -7); var b = new Complex(4, 3); console.log(complex_num_add(a,b)); // 6-4i
内容的提问来源于stack exchange,提问作者user6787493
相关产品推荐
相关产品推荐

