zoukankan      html  css  js  c++  java
  • 找个对象

    在js中,定义函数的方法貌似很多,但是我觉得最常用的方法就是定义对象类,即先使用构造函数定义对象的属性,然后通过使用原型技术为对象定义共享的方法。在定义方法的时候就会用到prototype属性。再精简一点说,就是先定义名词再动词。当然,js也具有其他高级语言的3个基本特性:封装,继承,多态性。

    了解下 javascript 预处理阶段 :

    LexicalEnvironment
    {
          a: undefined
          fn: 对函数的引用      
    }

    注意:a 为一个 var 的全局变量,fn 为一个声明的函数,即 function fn () {} 。var fn = function () {} 为表达式。

    1.构造函数中的属性,属于私有,在被调用时不公用;但是属性值相等,函数方法不等。

    2.prototype 一般放置实例化对象的公共属性,属于公有,在被调用时公用一套属性值和方法。

    构造函数.prototype  是 [object object] ,所以在设置公有属性时,可以用对象字面量方式赋;但是,该方法属于覆盖原有属性,权衡先。

    3.构造函数.prototype.constructor 属于默认原型的属性,函数指向它本身,即构造函数;假如照本文上句所说,会覆盖,则需要在对象字面量中重新指向 constructor。

    那么 constructor 的应用场景 ?为何要分公有和私有 ?

    4.对象.__proto__ === 对象的构造函数.prototype,皆指向公有属性,于是对象在寻找属性是,先私有,在 __proto__。

    5.构造函数中的 this 指向实例化的对象,事件函数中的 this 指触发函数的对象。

    6.构造函数创建的对象(实例化对象)是可以修改(添加,删除)的。

    7.可以用  instanceof 判断实例化对象是否是构造函数由来。

    8.构造函数原型 prototype 里的属性可被方法重写,重写后prototype中的属性不变,但实例中创建(修改?覆盖?)了这个属性,即实例对象的属性与构造对象原型的同个属性值将可能不同。

    场景:function Dog(){}; Dog.prototype.sitting = false; Dog.prototype.sit = function(){if (this.sitting) {console.log('sit')} else {this.sitting = true; console.log('sit2')}};    var s = new Dog();  console.log(s.sitting)  ;console.log(Dog.prototype.sitting)

    9.判断属性是对象还是构造函数原型的:hasOwnProperty

    10.子函数继承复函数私有属性 Parent.call(this,param1,param2...)    //call.this 指向Child

  • 相关阅读:
    Autofac-案例
    Autofac-DynamicProxy(AOP动态代理)
    AutoFac注册2-程序集
    MVC添加跨域支持Cros
    redis笔记3-基础知识与常用命令
    Redis笔记2-Redis安装、配置
    Redis笔记-八种数据类型使用场景
    ActionResult源码分析笔记
    .NET UrlRouting原理
    webapi使用ExceptionFilterAttribute过滤器
  • 原文地址:https://www.cnblogs.com/yuqlblog/p/8420771.html
Copyright © 2011-2022 走看看