zoukankan      html  css  js  c++  java
  • javascript学习总结

    1. js中的函数

    1.1 函数定义的方法有三种

    第一种:

    function box(num1, num2){

                return num1 + num2;        

            }

    第二种:

            var box = function(num1, num2){

                return num1 + num2;

            }

    第三种:

            var box = new Function('num1', 'num2', 'return num1+num2;');

    那么函数到底是什么呢?

    我们可以alert(box) 打印出的函数整个声明

    alert(typeof box); 打印出的是 function ,表明是一个fucntion 对象。

    2. applay 和 call

    是每一个函数所拥有的两个方法,使用他们可以扩充函数的执行作用与。

    同时每一个函数内部可以应用的内置对象由:this和arguments,第一个代表函数执行的作用与。第二个是函数的参数。

    函数也是对象,所以函数也有属性和方法。每一个函数都包含两个属性:

    length 和 prototype 。其中length标识函数希望接受的命名参数的个数。

    prototype 属性,保存苏偶有实例方法。prototype有两个方法 apply 和call

    3. 在js中如何创建一个对象

    3.1 直接使用 new Object

    var obj = new Object();

    obj.name = "jack";

    obj.age = 19;

    obj.sayHello = function(){

        alert("hello i'am " + this.name);

    }

    这种做法虽然可以,但是当我们要创建大量的相同类型的对象时,就要写相同的代码,服用性非常差。

    3.2 使用工厂方法:

    function createObject(name, age){

        var obj = new Object();

        obj.name = name;

        obj.age = age;

        obj.sayHello = function(){

        alert("hello i'am " + this.name);

        }

        return obj;

    }

    此时我们就可以使用这种方法,创建大量的相同对象,但是,存在一个问题,就是 这样创建的对象,无法进行类型识别。他们都是Object类型。所以在实际使用中非常不安全。

    3.3 构造函数

    function User(name, age){

        this.name = name;

        this.age = age;

        this.sayHello = function(){

        alert("hello i'am " + this.name);

        }

    }

    上面的函数和工厂方法的代码非常相似,但是,他没有 new Object,而是直接使用this。这中函数就是构造函数,他的使用方法是:

    var user = new User('tom', 19);

    同时我们可以使用 instanceof user 来识别其类型:是 User.

    所以使用构造函数可以对对象进行类型识别。

    但是,这种方法同样存在一个问题,就是对于sayHello函数,每一个new出来的对象都有一份sayHello函数的拷贝。这样就造成大量内存的浪费。所以我们这种方法还有待改进

    3.4 使用全局函数来改进对象函数

    function User(name, age){

        this.name = name;

        this.age = age;

        this.sayHello = sayHello;

    }

    function sayHello(){

        alert("hello i'am " + this.name);

    }

    这样的话,对于每一个new出来的对象。sayHello函数都只有唯一的一份拷贝,节省了内存。但是这样做还是存在一个问题。就是sayHello函数也可以当作全局函数直接被使用,当其被直接使用是,this指针就是执行window域。其行为是未定义的,不可知的。其实从对象封装的角度触发,这样的方法是破坏了对象的封装,所以这种方法也不行。

  • 相关阅读:
    iframe跨域访问
    Discuz教程:X3.1-x3.2后台admin.php防止直接恶意访问
    JS打开新窗口的2种方式
    怎么让alert弹出框的内容可以换行?
    php判断IE浏览器
    一个表单的多按钮提交
    document.form.command.value
    如何区分处理两个提交按钮
    javascript window.confirm确认 取消对话框实现代码小结
    asp.net mvc 在View中获取Url参数的值
  • 原文地址:https://www.cnblogs.com/a-ray-of-sunshine/p/4658712.html
Copyright © 2011-2022 走看看