标签: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