首页 > 代码库 > 面向对象
面向对象
1, 基础复习
JavaScript 的构成: __ECMAScript___, ___DOM__, 和 __BOM___.JavaScript 的数据类型分为三种: __简单___, __复杂___, 和 __空__.基本类型有: __string___, __number___, ___boolean__.复合数据类型: ___object__.特殊类型: __null___, __undefined___.常见的内置对象有: __Date_, _Math__, __Array___, _Object____, __RegExp, __String___, __Number___, 和 _Boolean____.将代码进行封装, 复用的逻辑单元称为 __函数___.定义函数的基本语法为: 1> function foo() {}2> var func = function foo () {};什么是对象: __jianzhidui的jihe___.什么是属性: __value 为数据的键___.什么是方法: ___value 为函数的键__.
2, 原型的基本概念
对象的原型是什么 __构造函数.prototype___. 对象.__proto__如何获得原型对象: _____ 和 _____.原型的作用(为什么需要原型): __复用___.如何给原型对象添加成员: 1> o.xxx = xxxx2> o.__proto__.xxx = xxxx
3> 继承的概念
自定义构造函数 Foo 创建的对象 obj 继承自 __Foo.prototype ___. 或者 Object.prototype自定义函数 Foo 的原型属性 prototype 继承自 __Object.prototype___.如何获得 Foo 函数的原型: __Foo.prototype___.如何获得 obj 对象的原型对象: __obj.__proto__ ___.默写经典继承语法:var o={};function Foo(){}Foo.prototype=o;var foo =new Foo();所谓的经典继承函数就是将构造函数的原型设置为需要的对象 if(!Object.create){ Object.prototype.create=function (o){ function F()= o; return new F(); } }
4> Object 对象
如何获得数据的类型: typeof. 内置对象:toString.call(对象) 自定义对象:Object.prototype.type=function(){ var txt=this.constructor.toString(); return (/function\s(.+?)\(/g).exec(txt)[1]; }Object.prototype 包含哪些常用方法: _constructor、hasOwnProperty、isPrototypeOf、 propertyIsEnumerable、toLocalsString 、toString、valueOf...curstructor ; 就是原型对象描述的构造函数hasOwnProperty 方法的语法和含义是什么: ___判断是否为继承属性 __. property 属性 attribute 特效例:function Foo(){ this.name="张三"; } Foo.prototype={ constructor:Foo, age:14, gender:"男" } var fn=new Foo(); var isTrue=f.hasOwnProperty(age); console.log(isTrue);//返回布尔值:flase var isTure=f.hasOwnProperty(name);//ture var isTrue=f.hasOwnProperty(sex);//flaseisPrototypeOf 方法的函数与语法是什么: _ 是XXX的原型 ____.例:function Foo(){} var o = {}; var p = new Foo(); var isTrue=Foo.isPrototypeOf(o); console.log(isTrue);//flase var isTrue=Foo.isPrototypeOf(p);//turepropertyIsEnumerable 方法的含义与语法是什么: 属性是可以枚举的 可以理解为可以显示的.例:var o={name:"张三"}; function Foo(){ this.a="ad"; this.b="cs"; } Foo.prototype=o; var f=new Foo(); for(var k in f){ console.log(k+propertyIsEnumerable(k));//a:ture b:ture name:flase }即:for in 可以遍历对象的属性 ,但是内置的方法无法遍历构造函数默认参数是什么: __ this 和 arguments __.toString:变成字符串toLocalsString:变成本地字符串,可进行编写valueOf:把一个对象变成数值类型(基本类型)
5> Function 对象
构造函数的一些结论:
1> 构造函数 Foo 有原型属性 Foo.prototype2> 构造函数 Foo 创建出来的对象 foo. 这个对象的类型是: Foo3> 原型 Foo.prototype 的类型是 Foo4> foo 是一个对象, 要访问其原型对象, 使用 foo.__proto__5> foo.__proto__ 和 Foo.prototype 是相同的一个东西. foo.__proto__ 类型 Foo6> Foo.prototype 也是对象(foo.__proto__ 也是对象), 也有__proto__ 属性7> Foo.prototype.__proto__ 是 Object.prototype8> Object.prototype 是 Object 类型9> {} 是什么类型: Object10> {} 与 Object.prototype 什么关系? {}.__proto__ 就是 Object.prototype11> Foo, foo 与 Object.prototype 什么关系 foo -> Foo.prototype -> Object.prototype
1, 在 javascript 中,
任何一个对象都可以找到一条原型链的结构,所谓的继承, 就是修改对象的原型链的层次结构使得 当前对象可以使用原型链中对象的成员
涉及到属性搜索原则: 首先在当前对象中找. 如果有就直接使用. 否则到构造方法的定义中找
var o = new ...();o.xxx = xxx如果还没有, 在原型中找 构造方法.prototype 或 对象.__proto__如果有就使用, 并停止寻找, 如果没有继续在原型对象的原型对象中找, 直到 Object.prototype
2, 构造函数中 this 的含义
function Person() { this.name = "jim";}var p = new Person();
调用关键字 new, 分配内存 {}
调用构造方法, 将内存首地址交给方法的 this
3.this
方法中 this 是当前对象构造方法中 是新建的对象函数中 this 指全局对象 (window)
4,练习1
1> Function 的原型属性(prototype)是 Funtion.prototype___.2> Function 的原型对象(__proto__)是 Funtion.__proto__.3> Function 创建函数的语法为 _new Function(参数1,参数2...,方法) ____.4> arguments 的作用 __当前函数的一个内置属性___.5> Object 的原型对象(__proto__)是 __Function.prototype___.6> Function.prototype 继承自 _ Object.prototype ____.7> 代码 function Foo() {} var o = {}; Foo.prototype = o; var foo = new Foo(); foo.constructor 是 __Object___.8> 代码 function Foo() {} Foo.constructor 是 _Function____.
9> 如何判断函数调用时, 传入参数的个数是正确的: 函数名.length===arguments.length 是否相等.
1.把arguments转化成数组
(function(){ console.log(arguments instanceof Array); // false var argsArray = Array.prototype.slice.call(arguments); console.log(argsArray instanceof Array); // true }());
2.getElementsByTagName返回的NodeList也可以转化成数组
Array.prototype.slice.call(nodes)
1, 利用 Function 创建函数的语法:
new Function(形参1,形参2,...,形参N,函数体); .
2, caller 是如何调用的: 函数名.caller .
//caller 调用函数例:function foo(){ console.log(foo.caller); } function foo1(){ foo(); } //foo为被调用函数 //foo1为调用函数 输出结果为 : function foo(){ console.log(foo.caller); }
3, 函数名.length 表示什么: ___形式参数的个数 __.
4, arguments 是数组吗? _不是数组.
5, 如何获得用户输入的所有参数: arguments_.
6, 如何判断用户输入的参数与函数定义的参数个数一样?
arguments.length===函数名.length_.
7, 如果我希望用户输入一个字符串就打印, 如果输入一个函数就调用怎么写? eval.
eval("console.log("+输入+")");
8, 如果有一个函数 function J() {}, 要求输入字符串, 则返回页面中 id 为该名字的 dom 对象
如果传入的是一个函数, 则将其加载到 window.onload 上
9, 使用 Function 返回的函数的原型属性类型是什么: Object_.
10, 函数字面量与函数声明有什么区别(两条以上): _____.
1 字面量
var function fn(){};
var f=new function ff(){}/var f=new function(){} ;
var obj={};
var arr=[];
var num=1; //数值类型预解析
2 分号
3 全局 定义顺序
4 声明必须带名字 表达式可以不带名字
5 补充 有名字的函数表达式,函数名为函数内部的局部名字
例:var func=function foo(){ console.log(foo);//打印函数体 } console.log(foo);//在函数外部无法访问 ,IE8除外
11, 如何将函数表达式转换成函数字面量: _____.
例:(function foo(){ }) 或 var f=function(){} +function(){} -function(){} +function(){ console.log(111); }() 可以运行 (function(){ console.log(111); }()) 可以运行
12, eval 的作用?
eval(字符串);//函数在调用的时候,会将字符串参数作为代码而执行//eval会污染全局例:var json="{name:"张三",age:12}"; var a=eval("("+json+")"); console.log(a);
1, 在 JavaScript 中此法作用域概括的解释就是 1,与运行时无关_.
2, 在 JavaScript 中 function_ 限定作用域.
3, 在 JavaScript 中, 如果函数内定义了变量, 那么 不可以_ 访问函数外部的同名变量.
4, 在 JavaScript 中, 下面代码
if (!"a" in window) { var a = 123;}console.log(a);执行结果是多少 __undefined___.
5, 代码
if (true) { function f () { console.log("22222"); }} else { var f = function () { console.log("11111"); };}f();会执行什么 __22222___.
6, 代码
var n = 1, m = 2;function f() { var n = 3 m = 4 console.log(n); console.log(m);}f();console.log(n);console.log(m); 执行结果是什么? 3,4,1,4
7, 使用一句话总结什么叫闭包: __函数内部定义的数据外部无法访问____.
8, 如何让一个对象的一个属性, 数据允许读取, 但是不允许修改(利用构造函数初始化)
9, 代码
var arr = [ {name:"张三"}, {name:"李四"}, {name:"王五"}, {name:"赵钱"}, {name:"孙李"} ];for (var i = 0; i < arr.length; i++) { arr[i].show = function () { console.log(arr[i].name); };}for (var j = 0; j < arr.length; j++) { arr[j].show();}的执行结果是多少? 执行出错
10, 代码
var arr = [ {name:"张三"}, {name:"李四"}, {name:"王五"}, {name:"赵钱"}, {name:"孙李"} ];for (var i = 0; i < arr.length; i++) { arr[i].show = function () { console.log(arr[i].name); };}for (var i = 0; i < arr.length; i++) { arr[i].show();}的执行结果是多少? 张三 李四 王五 赵钱 孙李
面向对象