码迷,mamicode.com
首页 > 其他好文 > 详细

面向对象

时间:2016-12-02 02:12:04      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:prototype   asc   数据   reg   person   javascrip   全局   合数   变量   

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 = xxxx
2> 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);//flase

isPrototypeOf 方法的函数与语法是什么: _ 是XXX的原型 ____.

例:function Foo(){}
    var  o = {};
    var p = new Foo();
    var isTrue=Foo.isPrototypeOf(o);
    console.log(isTrue);//flase
    var isTrue=Foo.isPrototypeOf(p);//ture


propertyIsEnumerable 方法的含义与语法是什么: 属性是可以枚举的 可以理解为可以显示的.

例: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.prototype
2> 构造函数 Foo 创建出来的对象 foo. 这个对象的类型是: Foo
3> 原型 Foo.prototype 的类型是 Foo
4> foo 是一个对象, 要访问其原型对象, 使用 foo.__proto__
5> foo.__proto__ 和 Foo.prototype 是相同的一个东西. foo.__proto__ 类型 Foo
6> Foo.prototype 也是对象(foo.__proto__ 也是对象), 也有__proto__ 属性
7> Foo.prototype.__proto__ 是 Object.prototype
8> Object.prototype 是 Object 类型
9> {} 是什么类型: Object
10> {} 与 Object.prototype 什么关系?
    {}.__proto__ 就是 Object.prototype
11> 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();
}

的执行结果是多少?  张三 李四 王五 赵钱 孙李

面向对象

标签:prototype   asc   数据   reg   person   javascrip   全局   合数   变量   

原文地址:http://www.cnblogs.com/chenio/p/6087243.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!