美文网首页
JS面试2--原型

JS面试2--原型

作者: 写给我的公主的简书 | 来源:发表于2019-04-09 10:35 被阅读0次

原型

  1. 所有的引用类型(对象、数组、函数)都可以随意扩展属性(null除外)
var a =  {};
a.a=1
a.b='abc'
a.c=function(){}
  1. 所有的引用类型都有一个__proto__(隐式原型)属性
var a =  {};
console.log(a.__proto__)
  1. 所有的函数都有一个prototype(显示原型)属性
var foo =  function(){};
console.log(foo.prototype)

4.所有的引用类型(数组、对象、函数),__proto__属性指向其构造函数的prototype属性值

console.log(a.__proto__ === Object.prototype)

5.当获取对象的属性时,如果对象本身没有这个属性,就会去它的__proto__(即它的构造函数的prototype)中寻找

function Foo(name){
  this.name = name;
}
Foo.prototype.sayName = function(){
  alert(this.name);
}
var foo = new Foo('zhangsan');
foo.sayName();

补充:

1.遍历对象自身属性

function bianli(f){
    var item;
    var list = [];
    for(item in f){
        if(f.hasOwnProperty(item)){
            list.push(item);
        }
    }
    return list;
}

原型链

function Foo(name){
  this.name = name;
}
Foo.prototype.sayName = function(){
  alert(this.name);
}
var foo = new Foo('zhangsan');
foo.sayName();
/*
    * foo的__proto__中并不存在toString()
    * 由于foo.__proto__实质上也是一个对象,所以会继续向它的原型上查找
    * foo.__proto__.__proto__ === Object.prototype
    * 最终在Object.prototype上找到了 toString方法
    * 也就是 foo.__proto__.__proto__上找到了toString()
*/
foo.toString();
image.png

补充:

1.为避免死循环

Object.prototype.__proto__ === null
image.png

2.instanceof 是用于判断引用类型属于哪个构造方法的方法

/*
    * 逻辑 :
    * 从foo.__proto__上能否查找到foo.__proto__===Foo.prototype
    * 找到则返回true否则false
    * 由于foo.__proto__=== Foo.prototype
    * 由于foo.__proto__.__proto__=== Object.prototype
*/
console.log(foo instanceof Foo)   //true
console.log(foo instanceof Object)   //true

面试题

image.png
var f = [];
f instanceof Array;   //true
typeof f;   //Object  注意:无法使用typeof 判断
function People(name,age){
    this.name = name;
    this.age = age;
}
function Man(){
    this.sex = 'Male';
}

Man.prototype = new People();

var lisi = new Man();
lisi.name = 'lisi';
lisi.age = '18';
console.log(lisi.name+lisi.age);
console.log(lisi instanceof People);  //true
image.png

相关文章

  • JS面试2--原型

    原型 所有的引用类型(对象、数组、函数)都可以随意扩展属性(null除外) 所有的引用类型都有一个__proto_...

  • web前端面试之js继承与原型链(码动未来)

    web前端面试之js继承与原型链(码动未来) 3.2.1、JavaScript原型,原型链 ? 有什么特点? 每个...

  • Javascript原型理解(面试篇)

    本文是学习JS原型相关知识后的总结与笔记:学习文章参考《一文吃透所有JS原型相关知识点》 在面试中会被经常问到JS...

  • 前端面试必考题目(二)js原型和原型链

    这是关于javascript原型的第七次讨论 昨天 昨天我们开始讨论了关于js原型的面试题目,原型是javascr...

  • 前端面试送命题-JS三座大山

    index 前端面试送命题-JS三座大山 __mahao 原型与原型链 说到原型,就不得不提一下构造函数,首先我们...

  • 面试 | JS高级---原型到原型链(一看就懂)

    面试 | JS高级---原型到原型链(一看就懂) 一个敲代码的前端妹子已关注 0.42018.06.28 09:4...

  • js里面的原型与原型链

    原型与原型链算是js里面的一个老生常谈的问题,面试的中奖率也是很高,他到底是个什么鬼 原型是什么?原型有什么作用?...

  • 前端面试必问总结

    前言 本文用于总结个人在工作期间总结的一些面试题 题目列表 js的函数声明 js的原型链 js的闭包 js的Pro...

  • react前端面试总结

    面试一般会分为笔试和面试两部分。笔试一般都是比较基础的题目。 js考点一般有原型原型链,作用域和闭包,dom操作,...

  • 廖雪峰JS小记

    (function(){})() 原型,原型链 浅谈Js原型的理解JS 原型与原型链终极详解 对象 对象:一种无序...

网友评论

      本文标题:JS面试2--原型

      本文链接:https://www.haomeiwen.com/subject/uuoviqtx.html