精华内容
下载资源
问答
  • 原型链面试题

    2020-12-12 21:56:57
    测试1 var A = function() {} A.prototype.n = 1 var b = new A() A.prototype = { n: 2, m: 3 } var c = new A() console.log(b.n, b.m, c.n, c.m) // 1 undefined 2 3 测试2 var F = function() {} ...

    关于原型链的特殊情况的几条总结:

    1. Object并不是原型链顶层,Object.prototype才是原型链的顶层,有:Object.prototype.__proto__ = null
    2. 所有函数都是Function的实例(包括Function),有:Function.prototype = Function.__proto__
    3. 所有对象都是Object的实例(包括原型对象),有:Function.prototype.__proto__=Object.prototype

    测试题1

    var A = function() {}
    
    A.prototype.n = 1
    
    var b = new A()
    
    A.prototype = {
      n: 2,
      m: 3
    }
    
    var  c = new A()
    
    console.log(b.n, b.m, c.n, c.m) // 1 undefined 2 3
    
    

    测试题2

    var F = function() {}
    
    Object.prototype.a = function() {
      console.log('a()')
    }
    
    Function.prototype.b = function() {
      console.log('b()')
    }
    
    var f = new F()
    
    f.a() // a()
    f.b() // b is not a function(报错)
    F.a() // a()
    F.b() // b()
    
    

    注:

    Object.prototype.constructor.__proto__ === Function.prototype // true
    
    Function.prototype.__proto__ === Object.prototype // true
    
    Object.prototype.__proto__ === null // true
    

    构造函数的原型继承的Function, Function继承的是Object, 意思就是Object的prototype就是尽头了

    在这里插入图片描述

    展开全文
  • function A() { } A.prototype.n = 1 var b = new A() A.prototype = { ... // A的原型对象被改变了,但是b的原型对象可没变 var c = new A() console.log(b.n, b.m, c.n, c.m) //1 underfined ...
      function A() { }
            A.prototype.n = 1
            var b = new A()
            A.prototype = {
                n: 2,
                m: 3
            }
            // A的原型对象被改变了,但是b的原型对象可没变
            var c = new A()
            console.log(b.n, b.m, c.n, c.m)  //1  underfined 2 3 
    

    图解
    2.

          function F () {}
            Object.prototype.a = function() {
                console.log("a()");
            }
            Function.prototype.b = function() {
                console.log("b()");
            }
    
            var f = new F()
            f.a()	//a()
            // f.b()    f.b不是一个函数  未捕获类型错误
            F.a()	//a()
            F.b()	b()
    
    展开全文
  • 题目1.如何准确判断一个变量是数组类型 var arr = []; typeof arr; // obj typeof无法判断是不是数组 ... 1、验证原型对象 Object.getPrototypeof(obj) 要检测的类型的构造函数.prototype 2、验证构造函

    题目1.如何准确判断一个变量是数组类型

            var arr = [];
            typeof arr; // obj typeof无法判断是不是数组
            使用 instanceof 方法
            arr instanceof Array // true
            
    		如何检测数据类型
            1、验证原型对象
            Object.getPrototypeof(obj) 要检测的类型的构造函数.prototype
            2、验证构造函数
            obj.constructor === 要检测的类型的构造函数
            objinstanceof === 要检测的类型的构造函数
            <!-- constructor属性返回对创建此对象的数组函数的引用。-->
            <--instanceof 判断函数的原型是否在对象的原型链上 -->
            3、检查内部属性class 每个对象中记录对象创建时使用的类型的属性一旦对象被创建,class属性就无法被修改
            Object.prototype.toString.call(obj)==='[object 要判断的类型的构造函数]
            4typeof 
            typeof 要检测数据类型
            typeof无法判断是不是数组 且无法检测nullnull则需要用===来检测
    

    题目2.写一个原型链继承的例子

     	//动物
        function Animal() {
            this.eat = function() {
                console.log('animal eat')
            }
        }
        //狗
        function Dog() {
            this.bark = function() {
                console.log('dog bark')
            }
        }
        Dog.prototype = new Animal();
        // 二哈
        var hashiqi = new Dog();
    

    实例:封装 DOM 查询
    定义构造函数 Elem,属性封装成 id

    function Elem(id) {
        this.elem = document.getElementById(id) 
    } 
    Elem.prototype.html = function(val) {
        var elem = this.elem
        if (val) {
            elem.innerTHTML = val
            return this //链式操作
        } else {
            return elem.innerHTML
        } 
    }
    Elem.prototype.on = function(type, fn) {
        var elem = this.elem
        elem.addEventListener(type, fn) 
    }
    var div1 = new Elem('div1') 
    console.log(div1.html())
    
    var div1 = new Elem('detail-page')
    console.log(div1.html) // 打印出所有的 html
    
    // 将所有的 html 变为 hello imooc ,并且点击弹出 ‘clicked’
    div1.html('<p>hello imooc</p>')
    div1.on('click', function() {
    	alert('clicked ')
    })
    

    题目3.描述 new 一个对象的过程

    1.创建一个新对象

    2.this 指向这个新对象

    3.执行代码,即对新对象赋值

    4.返回新对象

    function Student(name, age) {
        this.name = name
        this.age = age
        this.class = 'class';
        // return this // 每个构造函数都有这句代码,只是默认隐藏了
    }
    var stu1 = new Student('zhangsan', 20);
    

    大写字母开头一般都是构造函数

    new 的过程:
    1.创建一个新空对象

    2.var stu1 = new Foo(‘zhangsan’,20) 将参数传进去,函数中的 this 会变成空对象

    3.this.name = name;this.age = age 为赋值;return this 为实际的运行机制。.return 之后赋值给 stu1 ,stu1 具备了stu1.name = zhangsan、stu1.age = 20

    4.返回stu1这个对象

    构造函数(扩展)
    1.var a = {} 其实是 var a = new Object()的语法糖 (a 的构造函数是 Object 函数)

    2.var a = [] 其实是 var a = new Array()的语法糖 (a 的构造函数是 Array 函数)

    3.function Foo(){…}其实是 var Foo = new Function(…) (Foo 的构造函数是 Function 函数)

    4.使用 instanceof 判断一个函数是否是一个变量的构造函数 (判断一个变量是否为“数组”。变量 instanceof Array)

    题目4.编写一个函数出去数组中的重复值(原型链上编程).

    Function.phototype.unqie=function(){
        var newarr = this.filter(function(item, index, array) {
            return array.indexOf(item) === index;
        });
        return newarr;
    }
    

    注意:在原型链上编程时,函数不能行进传参,用this代替参数,即谁调用该函数,this为谁。

    展开全文
  • 明确foo 和 F的原型链,沿着原型链找A属性和B属性; console.log(foo.a) foo 是个对象 对象的原型链 是Object foo.a 的原型链上a 所以 输出 value a console.log(foo.b) undefined foo的原型链上 没有 F ...

    明确foo 和 F的原型链,沿着原型链找A属性和B属性;

    console.log(foo.a)

    foo 是个对象  对象的原型链 是Object 

    foo.a  的原型链上a  所以  输出 value a

     

    console.log(foo.b)      undefined

    foo的原型链上 没有 F

     

    console.log(F.a)      value a

    F 的原型链是function原型 function原型 指向 Object原型

    console.log(F.b)      value b

    F 的原型链是function原型 function原型

     

    展开全文
  • 原型原型链 面试题

    2019-10-07 13:28:51
    //测试1 var A=function(){} A.prototype.n=1 var b=new A() A.prototype={ n:2, m:3 } var c=new A() console.log(b.n,b.m,c.n,c.m)//1,undefined,2,3 //测试2 var F=function(){}; Object.proto...
  • 分析: 这道主要的用到了原型链,先查看自身是否有,没有找原型,原型也没有找Object,再找不到就是undefined。 这道中console.log(b.n); 在查找b.n是首先查找 b 对象自身有没有 n 属性,如果没有会去原型...
  • <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>... f.
  • 这道是我面试的时候碰到的 function Parent() { this.a = 1; this.b = [1, 2, this.a]; this.c = { demo: 5 }; this.show = function () { console.log(thi...
  • 上一篇文章原型链面试题答案: 1. 说说JS中的原型链以及最顶端是什么 访问一个属性时,会先在实例本身查找该属性,如果没有,就到其原型对象中去查找,若还是没有会去构造这个对象的构造函数中去查找,如果没有就...
  • 2、原型机原型链 3、类的继承 4、原始类型和引用类型的区别 5、每一个知识点都可以拿出来做单独的专题研究。 解题需要的知识点细节 1.构造函数,都有一个prototype属性,指向构造函数的原型对象,...
  • 原则,即先查找实例属性,然后顺着原型链去查找指定的属性,直至原型链末端的 Object.prototype 和 null ,如果实例自身及整个原型链都不存在所查找的属性则返回 undefined 7.赋值语句对于原始值赋值和引用类型...
  • 原则,即先查找实例属性,然后顺着原型链去查找指定的属性,直至原型链末端的 Object.prototype 和 null ,如果实例自身及整个原型链都不存在所查找的属性则返回 undefined 7.赋值语句对于原始值赋值和引用类型...
  • 原型与原型链的常见面试题 1. var A=function(){} A.prototype.n=1 var b=new A() A.prototype={ n:2, m:3 } var c=new A() console.log(b.n,b.m,c.n,c.m)//1,undefined,2,3 分析一下:b.n 因为b是A的实例...
  • 2.写一个原型链继承的例子 //动物的构造函数,有一个方法eat function Animal() { this.eat = function () { console.log('animal eat'); } } //狗的构造函数,有一个方法bark function Dog() { thi
  • 之前面试的时候遇到过原型和原型链方面的题目,具体的已经忘了,只记得当时回答的稀里糊涂,今天查了一些资料,把自己所理解的写出来,加深记忆。 1,前提  在js中,对象都有__proto__属性,一般这个是被称为...
  • 原型链大厂面试题

    2021-04-03 02:11:45
    let bb = aa++ 新进行赋值操作 然后对数据 aa 进行加一操作 ,不单单是赋值操作。 function Parent() { this.a = 1; this.b = [1,2,this.a]; this.c = { demo :5 ... this.show = function () { ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 852
精华内容 340
关键字:

原型链面试题