前端复习--js面向对象的理解

这周一通过去闪银面试,和做熊猫的题,我发现,自己对js面向对象的理解,其实是

停留在很初级的层面上,需要不是几道面试题能解决的,我需要的是一本书。这本书目前是找到了:Oriented-object  javascript

这几天的任务就是去看本书,这篇博客的目的:随时记录学习困惑与答案。

1 instanceof 真的理解了吗?

题目:

function A(){}
A.prototype = {};
var a = new A();
a instanceof A;   //true
A.prototype.constructor;    //function Object() { [native code] }

function B(){}
var b = new B()
B.prototype.constructor;    //function B(){}
b instanceof B    //true


instanceof 理解需要更深入才行!!


2  build-in constructor 就是 build-in object

Math对象

Math is a little different from the other built-in global objects you saw above. It's not
a normal function and therefore cannot be used with new to create objects. Math is a
built-in global object, which provides a number of methods and properties that are
useful for mathematical operations.

3  如何理解(Function是一切函数的构造函数,包含它自己也是被自己构造出来的)

typeof Function.prototype      //"function",

typeof Object.prototype          //"object"

在看书时,看到多个问题

首先为什么Fucntion.prototype为什么是function,不是object;

然后,为什么Function.prototype是function,却没有prototype属性。

http://stackoverflow.com/questions/32928810/function-prototype-is-a-function


4 Array.isArray中的Array是什么?

Array是js的内置对象,isArray是直接定义在它上面的方法。Array.hasOwnProperty("isArray") ;                      //true

下面根据查阅mdn说明,手绘原型链示意图,觉得自己屌屌的。。。

前端复习--js面向对象的理解_第1张图片

第一次上传手迹,紧张激动中。。。。

在这个知识点上,我需要补充一些内容,如何理解Array这个js的内置对象?以及它的isAarry方法?

这个时候我喜欢先来点权威的东西,给读者看看,说实话,不找点权威资料,自己都不信。

从mdn当拔下这段代码:

if (!Array.isArray) {   // 假如不存在 Array.isArray(),则在其他代码之前运行下面的代码将创建该方法。其实就是isArray的源码实现。
  Array.isArray = function(arg) {
    return Object.prototype.toString.call(arg) === '[object Array]';
  };
}
Array虽然是构造函数,但在这里就仅仅从它是对象的角度,以“.”的形式,在Array上添加新属性isArray.

我们自己做实验可以证明这一点:

function Shape(){
 this.sex = "male"
 this.name = 'shape';
 var getName = function(){};
 this.toString = function() {return this.name;};
}

Shape.hasOwnProperty("getName")    //false
Shape.hasOwnProperty("sex")         //false


Shape.sex = "femal"                      //"femal"
Shape.hasOwnProperty("sex")      //true


5 为什么  Array.prototype instanceof Array;    //false

Array.prototype ;     //[]
[] instanceof Array;   //true
Array.isArray(Array.prototype)    //true

你可能感兴趣的:(前端复习--js面向对象的理解)