2 steve yanrun steve_yanrun 于 2016.02.13 11:18 提问

JavaScript面向对象编程问题

在Array()构造器及相关数组文本标志法都不存在的情况下,自定义一个类似MyArray()构造器,并令其通过以下测试:

var a = new MyArray(1,2,3,"test");
a.toString();
结果为:"1,2,3,test"

a.[a.length-1];
结果为:"test"

a.push("boo");
结果为:5

a.pop();
结果为:[boo]

求大神解答,谢谢!

3个回答

fk002008
fk002008   2016.02.13 15:43
已采纳

我大致看了下,您的意思是不是在不使用这个Array的构造器和相关数组文本标志法的情况下进行这个Array的操作
这是一个数据结构的封装问题把
其他的都好说,就是这个数组文本标志法 a.[a.length-1]; 这个[]不好进行实现
这个使用其他的函数名我觉的也是可以的比如 a.at(index)
基于这个我给你一个简单的封装:
看下面的步骤:
1--这个构造器的使用无非是一个函数,对于参数的不确定性,干脆就不要使用这个函数的参数了,从arguments中获取
在函数内部使用闭包返回我们想要的对象即可

     > var MyArray = function(){
... var list = [];
... for(var i = 0 ; i < arguments.length;i++)
... list.push(arguments[i]);
... this.toString = function(){
..... var re = '';
..... for(var i = 0 ; i < list.length ;i++)
..... re = re+list[i]+',';
..... return re.substring(0,re.length-1);
..... }

... this.at = function(index){
..... if(index<0|| list.length <= index){
....... console.log('the index '+index+' is error !!!');
....... return null;
....... }
..... return list[index];
..... }

... this.push = function(obj){
..... list.push(obj);
..... return list.length;
..... }

... this.pop = function(){
..... var obj = list.pop(list.length-1);
..... return '['+obj+']';
..... }
.....this.length = function(){
..... ...return list.length;
..... }
... }

那个length我忘了定义,是后面追加上来的
看看下面的图
图片说明

steve_yanrun
steve_yanrun 谢谢,有思路了
2 年多之前 回复
91program
91program   Ds   Rxr 2016.02.13 11:40

你new时,给了4个成员;
数组的下标是从0开始的,也就是说a [ 0 ] 等于1,所以3就等于test“”。
再 增加 push 一个,其大小为5。

这些都是基本语法,所以建议你先找本书打好基础。

leaf_130
leaf_130   2016.02.13 11:22

http://pan.baidu.com/s/1jGXD6LK

建议系统学习web基础

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
《JavaScript面向对象精要》
这本书应该是 14 年(或15年)买的,那时人比较傻,看不明白,匆匆看了几十页就束之高阁了,但是一有点很确定,这是本好书。今天终于来到了这里,感觉过了一道坎。引用类型就是对象,对象就是引用类型类型分原始类型和引用类型,原始类型就是那五个(ES5)boolean number string null undefined 其他的都是引用类型,引用类型就是对象,对象就是引用类型。值赋值和引用赋值的区别这两
面向对象JavaScript精要(英文原版pdf)
面向对象JavaScript 精要(英文原版pdf)
javascript中的面向对象理解(一)
一、注意:提到“面向对象”这一概念,众所周知,javascript中的面向对象思想与其他的编程语言(例如:PHP、Java等)是有着很大区别的。因此,我们先复习下,传统意义上,面向对象的相关概念,以便我们后面更好的将javascript与其他语言的面向对象概念区分开来: 1.其他面向对象语言:面向对象的语言有一个标志,即拥有类(class)的概念,抽象实例对象的公共属性与方法,基于类可以创建任意
javaScript-高级面向对象视频教程
avascript 是一个非常有个性的语言. 无论是从代码的组织, 还是代码的编程范式, 还是面向对象理论都独具一格. 而很早就在争论的 javascript 是不是面向对象语言这个问题, 显然已有答案. 但是, 即使 javascript 叱咤风云二十年, 对于面向对象的理论依旧不被大家所理解. 动态的语法特性,
Javascript面向对象例子--下雪效果
javascripts中到底什么是面向对象,直到现在我也很难说清楚,我看了网上的解释也是云里雾里,总觉得有些人故意把这个概念说的太专业,一大堆“深奥”的名词,原型链,构造对象等等,其实对于新手来说,还没理解到原理的地步,就像一个插件,在你没有能力之前,只需要知道如何使用,不用管他的底层原理。所以我自己参考了一些资料,用js面向对象试着写了一个下雪的效果,先来看看效果图。 说一下总体思路:既然是
JavaScript 面向对象之 this 关键字详解
js面向(基于)对象编程——类(原型对象)与对象 this—问题提出 在实际编程中,我们可能有这样的需求,当我们创建一个对象后,就希望该对象自动的拥有某些属性(比如:当我们创建一个Person对象后,就希望该对象自动拥有name和阿哥属性,这又怎么办?) 解决之道:使用this js虚拟机会给每一个对象分配this,代表当前对象。 实例代码: function Person
Javascript-类-模块化[面向对象已经无处不在]
Javascript是基于原型的编程语言,并不是面向对象的语言。 ES6已实现class关键字,这让js看起来更像一门面向对象的语言 主流语言类型: 基于原型的语言 面向过程的语言 面向对象的语言 函数式的语言 每一种语言的编程方式以及语法都会有所不同。 虽然Javascript并没有内置的类的实现,但可以模拟。Javascript有构造函数和new运算符,
第四章-JavaScript对象及初始面向对象
本章简介:JavaScript是一种基于对象的语言,在JavaScript中遇到的所有东西几乎都是对象。但是它并不是一种真正的面向对象的编程语言,而是通过 构造函数、原型链实现的一种基于对象的面向对象的语言。今天让我们来认识什么是对象,如何创建对象,构造函数、原型链以及继承在开发中的应用。 本章单词:Object                         基类Constructor     ...
Javascript实现面向对象技术PPT 超牛 不看后悔
Javascript ppt 面向对象 OOP
JavaScript面向对象编程(继承实现方式)
许多OO 语言都支持两种继承方式:接口继承和实现继承。接口继承只继承方法签名,而实现继承则继承实际的方法。如前所述,由于函数没有签名,在ECMAScript 中无法实现接口继承。ECMAScript 只支持实现继承,而且其实现继承主要是依靠原型链来实现的。在此,主要阐述一下,原型链继承,借用构造函数、组合继承、原型式继承、寄生式继承、寄生组合继承等。 1.原型链 ECMAScript 中描述了