zoukankan      html  css  js  c++  java
  • js的原型和原型链

    // 构造函数
    function arr(name, text) {
    this.name = name;
    this.text = text;
    this.class = 'clo-1';
    // return this,默认有这一行
    }
    let f = new arr('col-2', arr)
    console.log(arr) //function arr()
    // 构造函数-扩展
    let a = {}
    let b = new Object()
    console.log(a = b) //Object { }

    // 原型和原型链 - 5个原型规则
    // 原型规则和示例:5条原型规则,原型规则是学习原型链的基础
    // 1.所有的引用类型(数组,对象,函数),都具有对象特性,即可自由扩展属性,(除了null以外)
    // 2.所有的引用类型(数组,对象,函数),都有一个_proto_(隐式原型)属性,属性值是一个普通的对象。
    // 3.所有的函数,都有一个prototype(显式原型)属性,属性值也是一个普通的对象。
    // 4.所有的引用类型,(数组,对象,函数),_proto_属性值指向它的构造函数的prototype属性值。
    // 5.当试图得到一个对象的属性时,如果这个对象本身没有这个属性,那么会去它的_proto_(即它的构造函数的prototype)中寻找。
    let obj = {}
    obj.a = 100
    let arr1 = []
    arr.a = 100
    function fn() {}
    fn.a = 100
    console.log(obj.__proto__) //Object { }
    console.log(arr1.__proto__) //Array []
    console.log(fn.__proto__) //function ()
    console.log(fn.prototype) //Object { … }
    console.log(obj.__proto__ === Object.prototype) //true
    // 构造函数
    function foo(name,age){
    this.name = name
    }
    foo.prototype.alertName = function(){
    alert(this.name)
    }
    // 创建实例
    let g = new foo('nihao');
    g.printName = function(){
    console.log(this.name)
    }
    g.printName()
    g.alertName()

    //原型和原型链-5个原型规则-补充二点
    for (let item in f) {
    // 高级浏览器已经在 for in 中屏蔽了来自原型的属性
    // 但是这里建议大家还是加上这个判断,保证程序的健壮性
    if (f.hasOwnProperty(item)) {
    console.log(item)
    }
    }

    // 构造函数
    function Foo(name, age) {
    this.name = name
    }
    Foo.prototype.alertName = function() {
    alert(this.name)
    }

    // 创建实例
    let d = new Foo('lilei')
    d.printName = function() {
    console.log(this.name)
    }
    // 测试
    d.printName()
    d.alertName()
    d.toString() // 要去f.__proto__.__proto__中查找

    // 原型和原型链-原型链-instanceof,用于判断引用类型属于哪个构造函数的方法
    // f instanceof Foo 的判断逻辑是:f的__proto__一层一层往上,能否对应到Foo.prototype,再试着判断f instanceof Object
    let arra = [];
    arra instanceof Array
    console.log(typeof arra)

    // 原型链继承的样子
    function Animk(){
    this.eat = function(){
    console.log("domfaf")
    }
    };
    function Dog(){
    this.fa = function(){
    console.log("dog")
    }
    };
    Dog.prototype = new Animk();
    let hashiqi = new Dog();
    console.log(hashiqi)

    // 描述new一个对象的过程
    // 创建一个新对象,this指向这个新对象,执行代码,即对this赋值,返回this
    function foor(name, age){
    this.name = name;
    this.age = age;
    this.class = "class-1"
    // return this,默认有这一行
    }
    let ffaf = new foor('lilei', 18)
    let f2 = new Foo('hanmeimei', 18)
    console.log(ffaf,f2)

  • 相关阅读:
    C#验证码识别类网上摘抄的
    C#如何用WebClient动态提交文件至Web服务器和设定Http响应超时时间
    C#制作曲线图源码
    在PHP中怎样实现文件下载?
    ASP.NET如何调用Web Service
    MSDN中关于读取web.config的那块,System.Configuration.ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString
    饿也要做一个和这个差不多的blog,但功能上有要增强的
    理解能力的高低决定人们的学习能力的高低
    有点困惑了,不知道是从smartClient入手还是从做网站web入手学习.net技术
    什么工厂模式?反射, 晕了,有书吗,推荐推荐.....5555555555555
  • 原文地址:https://www.cnblogs.com/wtdall/p/12100009.html
Copyright © 2011-2022 走看看