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

  • 相关阅读:
    eclipse中文乱码问题解决方案
    修改Tomcat的JDK目录
    Tomcat 5.5 修改服务器的侦听端口
    HTML DOM教程 27HTML DOM Button 对象
    HTML DOM教程 24HTML DOM Frameset 对象
    Navicat for MySQL v8.0.27 的注册码
    HTML DOM教程 25HTML DOM IFrame 对象
    Tomcat 5.5 的下载和安装
    android manifest相关属性
    ubuntu10.04 下 eclipse 小结
  • 原文地址:https://www.cnblogs.com/yuqlblog/p/8420771.html
Copyright © 2011-2022 走看看