-
我爱学习查看全部
-
nice查看全部
-
另外一种对象创建的方法:Object.create,这里创建的对象属性是原型上的,其实例本身没有
查看全部 -
原型链,new一个函数对象,这个函数对象中的属性就相当于基类的属性,可被子类继承
查看全部 -
类型检测小结
查看全部 -
。有序 弱类型
。[, , ]//undefined *2
。delete删除元素后,长度不变,改为undefined
。for(i in array),不保证顺序,会迭代原型链上的属性,
查看全部 -
。属性检测 “legs”in cat;//true
。Object.defineProperty方法 添加属性并定义其标签
。语句+隐式转换+运算符
查看全部 -
。对象有prototype属性,函数是对象,通过构造函数创建对象时,所创建对象会继承构造函数的prototype属性,构造函数的prototype继承Object。形成原型链。
。添加与prototype相同的属性,查找时会被覆盖,但原型链属性不会修改
。var obj = Object.create({x:1});//创建继承自Object的对象,向其原型链添加x:1属性
。var obj = Object.create(null);//原型为null
查看全部 -
。对象 属性无序;key是字符串
。属性可动态添加/删除
查看全部 -
闭包就是能够读取其他函数内部变量的函数。
查看全部 -
Javascript中arguments对象的详解与使用方法
一、arguments使用方法
通过方括号语法访问每一个元素
var
fun =
function
(one) {
console.log(arguments[0]);
console.log(arguments[1]);
console.log(arguments[2]);
}
fun(1, 2, 3)
// 1
// 2
// 3
通过
length
属性,查看到底要几个参数function
fun() {
return
arguments.length;
}
fun(1, 2, 3)
// 3
fun(1)
// 1
fun()
// 0
参数赋值(“严格模式下不允许”)
var
fun =
function
(a, b) {
arguments[1] = 2;
return
a + b;
}
fun(1, 1)
// 3
二、arguments与数组的关系
虽然arguments可以使用中括号语法,并且具有
length
属性,但arguments对象只是与数组类似,并不是Array
的实例。因此,无法对 arguments 变量使用标准的数组方法,比如 push, pop 或者 slice。 虽然使用for
循环遍历也是可以的,但是为了更好的使用数组方法,最好把它转化为一个真正的数组。如何使用数组方法?
通过
apply
方法,把arguments作为参数传进去,这样就可以让arguments使用数组方法了。1234 // 用于apply方
法
myFunction.apply(obj, arguments).
// 使用与另一个数组合并
Array.prototype.concat.apply([1,2,3], arguments)
终极解决方法,直接转为真正的数组
下面的代码将会创建一个新的数组,包含所有 arguments 对象中的元素。
var
args = Array.prototype.slice.call(arguments)
;
//或者
var
args = [];
for
(
var
i = 0; i < arguments.length; i++) {
args.push(arguments[i]);
}
//或者
var
args = [].slice.call(arguments, 0);
三、强大却不建议使用的callee属性
arguments的
callee
属性可以调用函数本身,当函数正在执行时才可调用,可以实现方法的递归调用下面的代码将会实现一个求阶乘方法
var
factorial =
function
(x){
return
x<=1?1:x*arguments.callee(x-1);
}
在ECMAScript5严格模式中,对这个属性的读写操作会产生一个类型错误,并且会显著的影响现代 JavaScript 引擎的性能,所以,因此强烈建议大家不要使用
arguments.callee
和它的属性查看全部 -
this()方法和apply()方法的区别:
1. 每个函数都包含两个非继承而来的方法:call()方法和apply()方法。
2. 相同点:这两个方法的作用是一样的。
都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖以运行的作用域。
一般来说,this总是指向调用某个方法的对象,但是使用call()和apply()方法时,就会改变this的指向。
call()方法使用示例:
//例1 <script> window.color = 'red'; document.color = 'yellow'; var s1 = {color: 'blue' }; function changeColor(){ console.log(this.color); } changeColor.call(); //red (默认传递参数) changeColor.call(window); //red changeColor.call(document); //yellow changeColor.call(this); //red changeColor.call(s1); //blue </script> //例2 var Pet = { words : '...', speak : function (say) { console.log(say + ''+ this.words) } } Pet.speak('Speak'); // 结果:Speak... var Dog = { words:'Wang' } //将this的指向改变成了Dog Pet.speak.call(Dog, 'Speak'); //结果: SpeakWang1234567891011121314151617181920212223242526272829303132333435
apply()方法使用示例:
//例1 <script> window.number = 'one'; document.number = 'two'; var s1 = {number: 'three' }; function changeColor(){ console.log(this.number); } changeColor.apply(); //one (默认传参) changeColor.apply(window); //one changeColor.apply(document); //two changeColor.apply(this); //one changeColor.apply(s1); //three
3. 不同点:接收参数的方式不同。
apply()方法 接收两个参数,一个是函数运行的作用域(this),另一个是参数数组。
语法:
apply([thisObj [,argArray] ]);
,调用一个对象的一个方法,2另一个对象替换当前对象。说明:如果argArray不是一个有效数组或不是arguments对象,那么将导致一个 TypeError,如果没有提供argArray和thisObj任何一个参数,那么Global对象将用作thisObj。如果第一个参数不是对象的话,该方法会自动将第一个参数封装成相对应的对象。
而call()方法 第一个参数和apply()方法的一样,但是传递给函数的参数必须列举出来。
语法:
call([thisObject[,arg1 [,arg2 [,...,argn]]]]);
,应用某一对象的一个方法,用另一个对象替换当前对象。说明: call方法可以用来代替另一个对象调用一个方法,call方法可以将一个函数的对象上下文从初始的上下文改变为thisObj指定的新对象,如果没有提供thisObj参数,那么Global对象被用于thisObj。如果第一个参数不是对象的话,该方法会自动将第一个参数封装成相对应的对象。
使用示例1:
function add(c,d){ return this.a + this.b + c + d; } var s = {a:1, b:2}; console.log(add.call(s,3,4)); // 1+2+3+4 = 10 console.log(add.apply(s,[5,6])); // 1+2+5+6 = 14 1234567
使用示例2:
<script> window.firstName = "Cynthia"; window.lastName = "_xie"; var myObject = {firstName:'my', lastName:'Object'}; function getName(){ console.log(this.firstName + this.lastName); } function getMessage(sex,age){ console.log(this.firstName + this.lastName + " 性别: " + sex + " age: " + age ); } getName.call(window); // Cynthia_xie getName.call(myObject); // myObject getName.apply(window); // Cynthia_xie getName.apply(myObject);// myObject getMessage.call(window,"女",21); //Cynthia_xie 性别: 女 age: 21 getMessage.apply(window,["女",21]); // Cynthia_xie 性别: 女 age: 21 getMessage.call(myObject,"未知",22); //myObject 性别: 未知 age: 22 getMessage.apply(myObject,["未知",22]); // myObject 性别: 未知 age: 22 </script>
查看全部 -
。typeof 函数对象和基本类型,返回对应类型的字符串
。obj instanceof Object 左边对象的原型链上是否含有右边构造函数的prototype属性。按原型链查找。
。不同的window和iframe不嫩能使用instanceof
查看全部 -
。把基本类型(str,num,boolean)作为对象使用时,js会把其转换为对应的包装类型对象,返回值后会将临时对象销毁
查看全部 -
== 需隐式转换
查看全部
举报