首页 > 代码库 > 面向对象

面向对象

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();}的执行结果是多少?  张三 李四 王五 赵钱 孙李

面向对象