zoukankan      html  css  js  c++  java
  • 原型prototype

    prototype:
    每个函数都有一个prototype属性,所有通过相同函数创建的对象都指向同一个prototype对象。
    当使用对象的属性和方法时,首先在对象内部查找,如果没有就去原型中查找
    如果构造函数创建一个对象后修改构造函数的原型,之前创建的对象原型不变
    如果将prototype直接替换为一个新对象,原型对象中的constructor指向会有问题,应该手动修改


    constructor:
    每个原型对象都有一个constructor(构造函数)属性,constructor属性指向prototype所在函数的指针


    __proto__:
    每个对象都有一个__proto__属性,对象通过__proto__属性可以访问原型。__proto__是一个非标准属性,低版本浏览器不支持该属性。
    函数也是对象,也拥有自己的__proto__, 也就是Function.prototype, 而Function.prototype的__proto__指向了Object.prototype.
    对象的__proto__属性与构造函数的prototype属性指向同一个对象

    环形结构:http://www.cnblogs.com/wangfupeng1988/p/3979290.html

    原型链:

     

    对象实例可以访问原型中的值,但是不能修改原型中的值,如果在实例中添加一个属性。而这个属性已经包含在原型中,那我们就在实例中创建属性。
    使用hasOwnProperty()函数可以查看属性是在对象中还是原型中,只有属性在对象中时才会返回true
    当为对象添加一个属性时,这个属性就会屏蔽原型对象中同名的那个属性

    Object.prototype成员
    hasOwnProperty("propertyName"):是检测对象在排除原型链的情况下是否具有某个属性。
    propertyIsEnumrable("propertyName"):检测属性是否可用for..in..枚举,有些属性是不能被枚举的,比如:toString
    toString、toLocalString:转换为字符串
    isPrototypeOf(obj):查看对象与原型是否有关联关系

    无论属性在对象或原型中都返回true:
    alert("name" in person1)

    通过这个函数可以查看属性只否包含在原型中:
    function hasPrototypeProperty(obj,propertyName)
    {
    return !obj.hasOwnProperty(propertyName) && (propertyName in obj);
    }

  • 相关阅读:
    软件工程第一次作业
    邮件服务器的搭建
    将博客搬至CSDN
    古典密码加密解密之多表代换
    Nginx + Tomcat 负载均衡配置详解
    openstack i版搭建教程
    IIS、apache、tomcat服务器虚拟主机配置
    SMTP邮件发送命令
    hadoop集群安装
    信息管理系统(java)
  • 原文地址:https://www.cnblogs.com/fanfan-90/p/11921703.html
Copyright © 2011-2022 走看看