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

这篇博客记录了作者在复习JavaScript面向对象时的学习过程和困惑,包括`instanceof`的深入理解、内置构造函数与对象的关系、`Function.prototype`的性质、`Array.isArray`的原理,以及`Array.prototype`与`Array`的关系。作者通过查阅资料和实践,试图解答这些问题,并分享了自己的学习心得。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这周一通过去闪银面试,和做熊猫的题,我发现,自己对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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值