zoukankan      html  css  js  c++  java
  • JavaScript 创建对象

    有三种基本的方式可以创建对象: 工厂模式、构造函数模式和原型模式

    工厂模式:

    function createPerson(name, age) {
        var o = new Object();
        o.name = name;
        o.age = age;
        o.getName = function() {
            alert(this.name);
        };
        
        return o;       
    }
    
    var person1 = createPerson('james', 18);
    

     构造模式

    function Person(name, age) {
    	this.name = name;
    	this.age = age;
    	this.sayName = function() {
    		alert(this.name);
    	};
    }
    
    var person1 = new Person('james', 18);
    

     原型模式

    function Person() {};
    
        Person.prototype.name = 'james';
        Person.prototype.age = 18;
        Person.prototype.getName = function() {
        alert(this.name);
    };
    
    var person1 = new Person();
    

    理解原型对象:

    当定义构造函数Person时,会自动生成一个Person的原型对象Person.prototype;

    Person.prototype中同时自动生成属性constructor指向Person;

    注意: 如果用对象字面量重新定义原型对象时,需要添加属性constructor指向构造函数;

    工厂模式每次都会生产出一个实例返回,类和封装的实现没有达到;

    构造函数模式每次新建一个实例,其中的共通方法(函数)都会产生一个新的实例;

    原型模式未实现每个实例得私有属性;

    因此,最好的创建对象的模式为:

    组合使用构造函数模式和原型模式

    function Person(name, age) {
        this.name = name;
        this.age = age;
        this.friends = [];
    }
    
    Person.prototype = {
        constructor: Person,
        sayName: function() {
            alert(this.name);
        }
    };
    
    var Person1 = new Person('james', 18);
    
  • 相关阅读:
    「CF1380G」 Circular Dungeon
    「CF1208G」 Polygons
    P4827「国家集训队」 Crash 的文明世界
    「CF85E」 Guard Towers
    「BZOJ 2956」模积和
    「HEOI2016/TJOI2016」排序
    CF277E Binary Tree on Plane
    「SDOI2016」数字配对
    HNOI2020「Elegy」
    CSP-S2019「Symphony」
  • 原文地址:https://www.cnblogs.com/dreamerjdw/p/6223858.html
Copyright © 2011-2022 走看看