这周一通过去闪银面试,和做熊猫的题,我发现,自己对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 <strong>a little different</strong> 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说明,手绘原型链示意图,觉得自己屌屌的。。。
第一次上传手迹,紧张激动中。。。。
在这个知识点上,我需要补充一些内容,如何理解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