JS重写函数valueOf方法实现连续调用求和
来源:互联网 发布:淘宝怎么利用微淘推广 编辑:程序博客网 时间:2024/06/04 23:20
对象转原始值先toString再valueOf
var obj = { toString: function() { console.log('调用了 obj.toString'); return {}; }, valueOf: function() { console.log('调用了 obj.valueOf') return '110'; }}alert(obj);// 调用了 obj.toString// 调用了 obj.valueOf// 弹出110
从上面代码可看出输出obj时,先调用其toString方法,若toString返回原始值就直接返回,否则继续调用valueOf方法。
var obj = { toString: function() { console.log('调用了 obj.toString'); return {}; }, valueOf: function() { console.log('调用了 obj.valueOf') return {}; }}alert(obj);// 调用了 obj.toString// 调用了 obj.valueOf// Uncaught TypeError: Cannot convert object to primitive value
若toString和valueOf都返回对象则程序报错
对象与数值运算转原始值先valueOf再toString
var obj = { valueOf: function() { console.log('调用 valueOf'); return 5; }}console.log(obj + 1);// 调用 valueOf// 6var obj = { valueOf: function() { console.log('调用 valueOf'); return {}; }, toString: function() { console.log('调用 toString'); return 10; }}console.log(obj + 1);// 调用 valueOf// 调用 toString// 11var obj = { valueOf: function() { console.log('调用 valueOf'); return {}; }, toString: function() { console.log('调用 toString'); return {}; }}console.log(obj + 1);// 调用 valueOf// 调用 toString// Uncaught TypeError: Cannot convert object to primitive value
输出函数名先valueOf,再toString
function test() { var a = 1; console.log(1);}test;// 这里打印函数内容,即调用了test.valueOf()test.valueOf = function() { console.log('调用 valueOf 方法'); return 2;} test;// 输出如下:// 调用 valueOf 方法// 2
添加toString方法并将valueOf返回对象
test.valueOf = function() { console.log('调用 valueOf 方法'); return {};}test.toString= function() { console.log('调用 toString 方法'); return 3;}test;// 输出如下:// 调用 valueOf 方法// 调用 toString 方法// 3
若将其valueOf和toString都返回对象,程序不会报错
test.valueOf = function() { console.log('调用 valueOf 方法'); return {};}test.toString= function() { console.log('调用 toString 方法'); return {};}test;//调用 valueOf 方法//调用 toString 方法//ƒ #<Function>
题目
add(1)(2) // 3add(1, 2, 3)(10) // 16add(1)(2)(3)(4)(5) // 15
实现:
function add() { var args1 = Array.prototype.slice.call(arguments); var fn = function () { var args2 = Array.prototype.slice.call(arguments); return add.apply(null,args2.concat(args1)); }; fn.toString = function () { return args1.reduce(function (a, b) { return a * b; }); }; <!-- fn.valueOf = function () { return args1.reduce(function (a, b) { return a + b; }); };--> return fn;}
其中,valueOf和toString,哪个先被改写优先调用谁,同时出现,调用valueOf
阅读全文
0 0
- JS重写函数valueOf方法实现连续调用求和
- JavaScript中valueOf函数与toString方法重写优先级问题
- JS中的valueOf方法
- 方法连续调用的实现
- Integer.valueOf()方法实现
- js中函数对象的方法,原型方法apply、call、bind、toString、toLocaleString、valueOf
- 调用函数求和
- js实现iframe跨页面调用函数的方法
- js 实现定时对函数的调用setInterval()方法
- js中toString、toLocaleString、valueOf函数区别
- js求和函数
- JS中的 toString 和 valueOf 方法
- JS之Boolean的valueOf方法
- js调用函数的方法
- oracle 分析函数之分组求和、连续求和
- js重写alert函数
- 连续求和
- valueOf()方法
- Linux下rz/sz的安装及ssh服务的开启
- Druid 数据库连接
- xmemcached主要用法及与Spring集成--总结
- Java中涉及到和金钱有关的属性的类型
- 文章标题
- JS重写函数valueOf方法实现连续调用求和
- 优化SQL查询:如何写出高性能SQL语句
- 【模板】【数据结构】堆
- 关于iphone手机上点击事件不起作用
- 高亮编辑七夕代码,完美获取女神芳心
- AsyncTask异步加载图片
- java微信获取access_token(java微信开发学习笔记4)
- Android字节、十进制、十六进制、字符串之间的相互转换
- python3 sort sorted 函数应用