zoukankan      html  css  js  c++  java
  • javascript对象的几种生成方式

    对象是一组数据和方法的组合,在正规的面相对象语言中叫封装。在js当中对象是一种特殊的数据类型,其本身并不具备作用域的范围,她在整个作用域中参与运算。作用域规定了变量的可见范围,在es5及以下的es规范当中,js只有函数作用域和全局作用域。作用域主要是针对变量的执行环境,变量的搜索遵循,作用域链的嵌套关系。
    

    对象的几种生成方式

    1. 属性追加

    var obj = new Object() ;
    obj.name = 'zhangsan' ;
    obj.age = 22 ;
    console.log(obj.name) ;
    console.log(obj.age) ;

    1. 工厂方式

    function createObject()
    {
    let object = new Object() ;
    object.name = 'zhangsan' ;
    object.age = 22 ;
    object.sayName = function(){
    {
    console.log(this.name) ;
    }
    return Object;
    }
    let obj1 = createObject();
    let obj2 = createObject() ;
    console.log(obj1.sayName(), obj2.sayName()) ;

    1. 构造函数式

    function Person(name, age)
    {
    this.name = name ;
    this.age = age ;
    this.sayName = function()
    {
    console.log(this.name);
    }
    }
    let per1 = new Person('zangsan',22);
    let per2 = new Person('lisi', 22) ;
    per1.sayName(); //zhangsan
    per2.sayName(); //lisi

    1. 原型方式

    function Person(){}
    Person.prototype.name = 'zhangsan';
    Person.prototype.sayName = function(){
    console.log(this.name)
    }
    let person = new Person()
    person.sayName() //zhangsan

    1. 混合方式

    function Person(name, age)
    {
    this.name = name ;
    this.age = age ;
    Person.prototype.sayName = function(){
    {
    console.log(this.name);
    }
    }
    let person = new Person('zhangsan', 22) ;
    person.sayName();

    1. 动态原型方式

    function Person(name, age)
    {
    this.name = name ;
    this.age = age ;
    if(Person.flag = undefined)
    {
    Person.prototype.sayName = function(){
    console.log(this.name);
    }
    }
    }
    let person = new Person('zhangsan', 22) ;
    person.sayName() ; //zhangsan

    1. 对象字面量方式

    let person = .{
    name : 'zhangsan',
    age : 22,
    sayName: function(){
    console.log(this.name);
    }
    }

        注意:在所有对象的定义方式当中,混合方式和对象字面量的方式是比较推崇的做法  。  
    
  • 相关阅读:
    [中文] 以太坊(Ethereum )白皮书
    走近比特币:一个故事看懂“区块链”
    MAC下redis的安装和配置
    mysql查询优化
    mac上用VMWare虚拟机装Linux-Ubuntu
    rest-framework框架
    浅谈设计模式
    [BZOJ3786]星系探索(欧拉序+非旋treap)
    [SDOI2017]遗忘的集合(多项式ln+生成函数+莫比乌斯反演)
    [LuoguP4841]城市规划(多项式ln+生成函数)
  • 原文地址:https://www.cnblogs.com/chihaiping/p/6536607.html
Copyright © 2011-2022 走看看