<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script>
// 通过判断参数个数,模拟函数重载
function add(){
if(arguments.length ==1){
return arguments[0]+5;
}else if(arguments.length == 2){
return arguments[0] + arguments[1];
}
}
console.log(add(5))
console.log(add(15,45)); //Function对象
var doadd = new Function('arg1',"arg2","return (arg1+arg2)");
console.log(doadd(3,5)); //Function对象的属性:length和方法valueof(),toString();这两个方法返回函数的源代码,length返回,要求的参数个数; function add(num1,num2){
return num1 + num2;
}
console.log(add.length);
console.log(add.valueOf());
console.log(add.toString()); //函数是对象,函数可以有自己的属性和方法
function fun(num){
console.log('111');
}
fun.hi= function(){
console.log("hi,haha");
}
fun();
fun.hi(); //工厂函数
function createCar(color,size,logo){
var obj = new Object;
obj.color =color;
obj.logo = logo;
obj.size = size;
return obj;
}
var car1 = createCar("red","4","benchi");
console.log(car1); var car2 = createCar("blue","3","bwm");
console.log(car2); // 构造函数
function Car(size,color,logo){
this.color = color;
this.logo = logo;
this.size = size;
}
var car3 = new Car("5","green","dazhong");
console.log(car3); var car4 = new Car("6","black","jiefang");
console.log(car4); //原型方式
function Car(){
Car.prototype.color = "red";
Car.prototype.size = "7";
Car.prototype.logo = "dongfanghong"; }
var car5 = new Car();
console.log(car5);
var car6 = new Car();
console.log(car6); //混合构造、原型方法
function Cat(age,color){
this.age = age;
this.color = color;
}
Cat.prototype.eat = function(){
console.log("吃五个老鼠!");
}
var cat1 = new Cat("3","white");
console.log(cat1);
var cat2 = new Cat("4","black");
console.log(cat2); //动态原型方法
function Cat(age,color){
this.age = age;
this.color = color;
if(typeof Car._initialized == "undefined"){
Car.prototype.eat = function(){
console.log("吃五个老鼠!")
}
Car._initialized == true;
}
} //对象连接字符串
function StringBuffer(){
this._strings_ = new Array();
}
StringBuffer.prototype.append = function(str){
this._strings_.push(str);
}
StringBuffer.prototype.toString = function(str){
return this._strings_.join("");
} var buffer = new StringBuffer();
buffer.append("hello");
buffer.append("world");
buffer.append(" nihao");
console.log(buffer.toString()); //修改对象 //通过已有的方法创建新方法
Number.prototype.toHexString = function(){
return this.toString(16);
}
var b = 15;
console.log(b.toHexString()); //重命名已有方法
Array.prototype.enqueue = function(item){
this.push(item);
}
Array.prototype.dequeue = function(){
this.shift();
}
var arr = ["1","a"];
arr.enqueue("b");
console.log(arr);
arr.dequeue("1");
console.log(arr); //添加新方法
Array.prototype.indexOf = function(item){
for(var i=0;i<this.length;i++){
if(this[i] == item){
return i;
}
}
return -1;
}
console.log(arr.indexOf("b")); //为本地对象添加新方法
//如果想给 ECMAScript 中每个本地对象添加新方法,必须在 Object 对象的 prototype 属性上定义它。
Object.prototype.showValue = function(){
console.log(this.valueOf());
}
var str = "hello";
str.showValue(); //重定义已有的方法
// Function.prototype.toString = function(){
// return "function code hidden!";
// }
// function sayHi(){
// console.log("hi");
// }
// console.log(sayHi.toString()); //覆盖原始方法前,比较安全的做法是存储它的指针,以便以后的使用。有时你甚至可能在新方法中调用原始方法
Function.prototype.originToString = Function.prototype.toString;
Function.prototype.toString = function(){
if(this.originToString().length>20){
return "Function too long to display!"
}else{
return this.originToString();
}
}
function sayHi(){
console.log("hi");
}
console.log(sayHi.toString()); //极晚绑定,先实例化对象,再定义方法,也能把方法给到之前创建的实例, 不建议这么用
var o = new Object();
Object.prototype.sayHi = function(){
console.log("hi");
}
o.sayHi(); /*所谓绑定(binding),即把对象的接口与对象实例结合在一起的方法。
早绑定(early binding)是指在实例化对象之前定义它的属性和方法,这样编译器或解释程序就能够提前转换机器代码。
在 Java 和 Visual Basic 这样的语言中,有了早绑定,就可以在开发环境中使用 IntelliSense(即给开发者提供对象中属性和方法列表的功能)。
ECMAScript 不是强类型语言,所以不支持早绑定。
另一方面,晚绑定(late binding)指的是编译器或解释程序在运行前,不知道对象的类型。
使用晚绑定,无需检查对象的类型,只需检查对象是否支持属性和方法即可。ECMAScript 中的所有变量都采用晚绑定方法。这样就允许执行大量的对象操作,而无任何惩罚。*/
</script>
</body>
</html>

<!DOCTYPE html><html>    <head>        <meta charset="UTF-8">        <title></title>    </head>    <body>        <script>        // 通过判断参数个数,模拟函数重载           function add(){             if(arguments.length ==1){                return arguments[0]+5;             }else if(arguments.length == 2){                return arguments[0] + arguments[1];             }           }        console.log(add(5))        console.log(add(15,45));
        //Function对象         var doadd = new Function('arg1',"arg2","return (arg1+arg2)");        console.log(doadd(3,5));
        //Function对象的属性:length和方法valueof(),toString();这两个方法返回函数的源代码,length返回,要求的参数个数;
        function add(num1,num2){            return num1 + num2;        }        console.log(add.length);        console.log(add.valueOf());        console.log(add.toString());
        //函数是对象,函数可以有自己的属性和方法        function fun(num){            console.log('111');        }        fun.hi= function(){            console.log("hi,haha");        }        fun();        fun.hi();
        //工厂函数          function createCar(color,size,logo){            var obj = new Object;            obj.color =color;            obj.logo = logo;            obj.size = size;            return obj;          }          var car1 = createCar("red","4","benchi");          console.log(car1);
          var car2 = createCar("blue","3","bwm");          console.log(car2);
        //  构造函数        function Car(size,color,logo){            this.color = color;            this.logo = logo;            this.size = size;        }        var car3 = new Car("5","green","dazhong");        console.log(car3);
        var car4 = new Car("6","black","jiefang");        console.log(car4);
        //原型方式              function Car(){            Car.prototype.color = "red";            Car.prototype.size = "7";            Car.prototype.logo = "dongfanghong";
        }        var car5 = new Car();        console.log(car5);        var car6 = new Car();        console.log(car6);
        //混合构造、原型方法        function Cat(age,color){            this.age = age;            this.color = color;        }        Cat.prototype.eat = function(){            console.log("吃五个老鼠!");        }        var cat1 = new Cat("3","white");        console.log(cat1);         var cat2 = new Cat("4","black");        console.log(cat2);
        //动态原型方法        function Cat(age,color){            this.age = age;            this.color = color;            if(typeof Car._initialized == "undefined"){                Car.prototype.eat = function(){                    console.log("吃五个老鼠!")                }                Car._initialized == true;            }        }
        //对象连接字符串        function StringBuffer(){            this._strings_ = new Array();        }        StringBuffer.prototype.append = function(str){            this._strings_.push(str);        }        StringBuffer.prototype.toString = function(str){            return this._strings_.join("");        }
        var buffer = new StringBuffer();        buffer.append("hello");        buffer.append("world");        buffer.append("  nihao");        console.log(buffer.toString());
        //修改对象
        //通过已有的方法创建新方法        Number.prototype.toHexString = function(){            return this.toString(16);        }        var b = 15;        console.log(b.toHexString());
        //重命名已有方法        Array.prototype.enqueue = function(item){            this.push(item);        }        Array.prototype.dequeue = function(){            this.shift();        }        var arr = ["1","a"];        arr.enqueue("b");        console.log(arr);        arr.dequeue("1");        console.log(arr);
        //添加新方法        Array.prototype.indexOf = function(item){            for(var i=0;i<this.length;i++){                if(this[i] == item){                  return i;                 }                           }            return -1;        }       console.log(arr.indexOf("b"));
       //为本地对象添加新方法       //如果想给 ECMAScript 中每个本地对象添加新方法,必须在 Object 对象的 prototype 属性上定义它。       Object.prototype.showValue = function(){        console.log(this.valueOf());       }       var str = "hello";       str.showValue();
    //重定义已有的方法//     Function.prototype.toString = function(){//      return "function code hidden!";//     }//      function sayHi(){//          console.log("hi");//      }//      console.log(sayHi.toString());
    //覆盖原始方法前,比较安全的做法是存储它的指针,以便以后的使用。有时你甚至可能在新方法中调用原始方法       Function.prototype.originToString = Function.prototype.toString;       Function.prototype.toString = function(){        if(this.originToString().length>20){            return "Function too long to display!"        }else{            return this.originToString();        }       }       function sayHi(){            console.log("hi");        }       console.log(sayHi.toString());
    //极晚绑定,先实例化对象,再定义方法,也能把方法给到之前创建的实例, 不建议这么用       var o = new Object();       Object.prototype.sayHi = function(){        console.log("hi");       }       o.sayHi();      
    /*所谓绑定(binding),即把对象的接口与对象实例结合在一起的方法。       早绑定(early binding)是指在实例化对象之前定义它的属性和方法,这样编译器或解释程序就能够提前转换机器代码。          在 Java 和 Visual Basic 这样的语言中,有了早绑定,就可以在开发环境中使用 IntelliSense(即给开发者提供对象中属性和方法列表的功能)。       ECMAScript 不是强类型语言,所以不支持早绑定。       另一方面,晚绑定(late binding)指的是编译器或解释程序在运行前,不知道对象的类型。       使用晚绑定,无需检查对象的类型,只需检查对象是否支持属性和方法即可。ECMAScript 中的所有变量都采用晚绑定方法。这样就允许执行大量的对象操作,而无任何惩罚。*/        </script>    </body></html>

js函数技巧的更多相关文章

  1. 【JS小技巧】JavaScript 函数用作对象的隐藏问题

    用户反馈 @消失的键盘 在论坛反馈了一个问题,在 AppBoxMvc 中的 Title 模型中,如果将 Name 属性改名为小写的 name 属性,就会报错: 因为这是一个 ASP.NET MVC 的 ...

  2. 【JS小技巧】JavaScript 函数用作对象的隐藏问题(F.ui.name)

    用户反馈 @消失的键盘 在论坛反馈了一个问题,在 AppBoxMvc 中的 Title 模型中,如果将 Name 属性改名为小写的 name 属性,就会报错: 因为这是一个 ASP.NET MVC 的 ...

  3. api日常总结:前端常用js函数和CSS常用技巧

    我的移动端media html{font-size:10px} @media screen and (min-width:321px) and (max-width:375px){html{font- ...

  4. 一探前端开发中的JS调试技巧

    前言 调试技巧,在任何一项技术研发中都可谓是必不可少的技能.掌握各种调试技巧,必定能在工作中起到事半功倍的效果.譬如,快速定位问题.降低故障概率.帮助分析逻辑错误等等.而在互联网前端开发越来越重要的今 ...

  5. 前端开发中的JS调试技巧

    前言:调试技巧,在任何一项技术研发中都可谓是必不可少的技能.掌握各种调试技巧,必定能在工作中起到事半功倍的效果.譬如,快速定位问题.降低故障概率.帮助分析逻辑错误等等.而在互联网前端开发越来越重要的今 ...

  6. js小技巧总结

    js小技巧总结 1.Array.includes条件判断 function test(fruit) { const redFruits = ["apple", "stra ...

  7. js 调试技巧

    快捷键 1.快速查看HTML中dom元素绑定那些JS事件方法 chrome中      F12-->Elements-->Event Listenners 参考:https://jingy ...

  8. 【repost】一探前端开发中的JS调试技巧

    有请提示:文中涉及较多Gif演示动画,移动端请尽量在Wifi环境中阅读 前言:调试技巧,在任何一项技术研发中都可谓是必不可少的技能.掌握各种调试技巧,必定能在工作中起到事半功倍的效果.譬如,快速定位问 ...

  9. 常用 JS 函数

    各种业务开发都离不开对数据的处理,然而遇到的很多数据都是不好处理的.这个时候就需要寻求搜索引擎的帮助.这种方法效率是非常低下的,而且根据作者的个性不能保证其对自己的口味.因此这篇文字包含了一份 JS ...

随机推荐

  1. (KMP)Simpsons’ Hidden Talents -- hdu -- 2594

    http://acm.hdu.edu.cn/showproblem.php?pid=2594 Simpsons’ Hidden Talents Time Limit: 2000/1000 MS (Ja ...

  2. (线段树 区间查询更新) Can you answer these queries? -- hdu--4027

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=4027 分析:因为这个操作是把一个数变成平方根,所以显得略棘手,不过如果仔细演算的话会发现一个2^64数的 ...

  3. How Many Tables HDOJ

    How Many Tables Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  4. AspNetCore Mvc 自定义中间件认证

    AspNetCore Mvc 自定义中间件认证 实现控制器访问验证和拦截. 1.注册政策. 例如: services.AddAuthorization(options => { options. ...

  5. C# 一些代码小结--datGirdView 保存到csv文件

    if (dataGridView1.Rows.Count == 0) { MessageBox.Show("No data available!", "Prompt&qu ...

  6. C#获取微信二维码显示到wpf

    微信的api开放的二维码是一个链接地址,而我们要将这个二维码显示到客户端.方式很多,今天我们讲其中一种. /// <summary> /// 获取图片路径 /// </summary ...

  7. C# AutoMapper 了解一下

    什么是AutoMapper? 简单来说就是将一个对象映射到另一个对象的代码. 摆脱了繁琐的赋值过程 (最常见也就是Model -——ViewModel) AutoMapper安装 我使用的是VS201 ...

  8. Unity运行时保存prefab的方法一则

    unity编辑器在运行状态时,prefab的apply按钮就消失了,其实此时代码访问的话是有效的. 代码如下,将会给transform的右键增加一个save prefab的选项. using Unit ...

  9. .net下使用最小堆实现TopN算法

    测试代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespac ...

  10. JIT与JVM的三种执行模式:解释模式、编译模式、混合模式

    Java JIT(just in time)即时编译器是sun公司采用了hotspot虚拟机取代其开发的classic vm之后引入的一项技术,目的在于提高java程序的性能,改变人们“java比C/ ...