zoukankan      html  css  js  c++  java
  • JavaScript原型

    function Person(){}
    Person.prototype.name = 'lzl';
    Person.prototype.showName = function(){
        document.write(this.name);
    }
    
    var p = new Person();
    p.showName();

    上面这段代码使用了原型而不是构造函数初始化对象。这样做与直接在构造函数内定义属性有什么不同呢?

      ☞ 构造函数内定义的属性继承方式与原型不同,子对象需要显式调用父对象才能继承构造函数内定义的属性。

      ☞ 构造函数内定义的任何属性,包括函数在内都会被重复创建,同一个构造函数产生的两个对象不共享实例。

      ☞ 构造函数内定义的函数有运行时闭包的开销,因为构造函数内的局部变量对其中定义的函数来说也是可见的。

    下面这段代码可以验证以上问题:

    function Foo(){
        this.prop1 = 'lzl';
        this.func1 = function(){
            document.write(this.prop2);
        }
    }
    Foo.prototype.prop2 = 'lzljj';
    Foo.prototype.func2 = function(){
        document.write(this.prop2);
    }
    
    var foo1 = new Foo();
    var foo2 = new Foo();
    document.write(foo1.func1 == foo2.func1);// false
    document.write(foo1.func2 == foo2.func2);// true

    两者有各自的适用范围,那么我们什么时候使用原型,什么时候使用构造函数内定义来创建属性呢?

      ☞ 除非必须用构造函数闭包,否则尽量用原型定义成员函数,因为这样可以减少开销。

      ☞ 尽量在构造函数内定义一般成员,尤其是对象或数组,因为用原型定义的成员是多个实例共享的。

  • 相关阅读:
    053-005
    053-002
    053-004
    Dynamic Programming: Fibonacci
    Some tips on using HashSet<T> and List<T>
    使用NPOI导出DataTable到Excel
    简简单单写个特效
    vue项目使用tinymce 适用于5.0版本
    封装AJAX
    全屏滑动效果
  • 原文地址:https://www.cnblogs.com/hwt987/p/3749423.html
Copyright © 2011-2022 走看看