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

        // 1、字面量创建
        var per1 = {
            name: '张三',
             age: '18',
             eat: function () {
                console.log('吃东西')
            }
        }
        // 2、Object方式创建
        var per2 = new Object()
        per2.name = '李四';
        per2.age = '18';
        per2.read = function () {
            console.log('读书')
        }
        // 3、通过工厂模式创建
        function person(name,age) {
            var obj = new Object();
            obj.name = name;
            obj.age  = age;
            obj.play = function () {
                console.log('玩游戏')
            }
            return obj
        }
        var per3 = person('王五','20')
       // 4、通过构造函数创建
        function animal(name, age) {
            this.name = name;
            this.age = age;
            this.food = function () {
                console.log('骨头')
            }
        }
        var ani1 = new animal('泰迪',3) // ani1称为实例化对象
        console.log(ani1.__proto__ === animal.prototype) // true 两者都是指向构造函数的原型
        console.log(ani1.__proto__.constructor === animal.prototype.constructor) //  true 两者都指向的是构造函数
        console.log(ani1 instanceof animal) // true 以此来判断对象是不是这种数据类型
    JS面向对象
    构造函数的执行流程:
    1、立刻创建一个新的对象
    2、将新建的对象设置为函数中的this
    3、逐行执行函数中的代码
    4、将新建的对象作为函数值返回
    使用同一个构造函数创建的对象,我们成为一类对象,也将一个构造函数成为一个类,
    我们将通过一个构造函数创建的对象,称之为该类的实例
    
    1、当以函数的形式调用时,this是window
    2、当以方法的形式调用时,谁调用方法this就是谁
    3、当以构造函数的形式调用时,this就是新创建的那个对象
    
    提升系统性能,不管实例化多少次对象,这个函数都只会调用一次,如果是写在构造函数内,则
    每一个实例化时都会调用。 但是这样就将函数定义在了全局作用域中,污染了全局作用域的命名
    空间,而且在全局作用域中也很不安全(通过原型链的方式向原型中添加fun方法可以保证函数不在全局作用域中,且只会执行一次)
    
    JS原型(prototype)
    我们所创建的每一个函数,解析器都会向函数中添加一个属性prototype
    这个属性对应着一个对象,这个对象就是我们所谓的原型对象
    当函数以构造函数调用时,所创建的对象中都会有一个隐藏的属性执行该构造函数的原型对  象
    原型对象就相当于一个公共的区域,所有同一个类的实例都可以访问这个原型对象
    我们可以将对象中共有的内容,统一设置到原型对象中。
    当我们访问对象的一个属性或方法时,它会先在对象自身中寻找,如果有则直接使用
    没有则会通过__proto__向原型对象中找,如果还是没有,则会在原型的原型上找,一直向上,一直找到object对象原型中(最终),如果有则返回,如果没有则返回undefined
    以后我们创建构造函数时,可以将这些对象共有的属性和方法,统一添加到构造函数的原型对象中,这样不用分别为每一个对象添加,也不会影响到全局作用域,就可以使每个对象都具有这些属性和方法了
    
    
    
     function  Person(name,age) {
         this.name = 'name';
         this.age = 'age';
         this.say=function () {
             console.log(this.name)
         }
     }
    var obj = new Person('aa',18);
     Person.prototype.sex = 'man';
     console.log(obj.sex)//man
  • 相关阅读:
    Codeforces Gym 100015F Fighting for Triangles 状压DP
    Codeforces Gym 100015B Ball Painting 找规律
    Codeforces Gym 100015A Another Rock-Paper-Scissors Problem 找规律
    Codeforces Gym 100231G Voracious Steve 记忆化搜索
    Codeforces Gym 100231F Solitaire 折半搜索
    Codeforces Gym 100231L Intervals 数位DP
    Codeforces Gym 100231B Intervals 线段树+二分+贪心
    Codeforces Round #339 (Div. 1) A. Peter and Snow Blower 计算几何
    Codeforces Round #339 (Div. 2) B. Gena's Code 水题
    Codeforces Round #339 (Div. 2) A. Link/Cut Tree 水题
  • 原文地址:https://www.cnblogs.com/cazj/p/10881754.html
Copyright © 2011-2022 走看看