JavaScript中的一些小细节
原型,原型链
object.prototype是所对象的老祖宗 形象化的理解。在这个老祖宗里面存着很多具体的方法 ;例如toString()这种方法就在里面存放着。同样的Array.prototype,Number.prototype里面都有这种方法还有Boolean;
下面是一些例子
123.toString();
//在这里.的优先级高,浏览器会以为这是一个数,会报错;
//应该这样来操作做:
var num = 123;
num.toString();
console.log(num);
//此时就会输出'123'
有一道题是这样的: 所有的对象都会继承object.prototype;
这句话是错误的 为什么呢?
这是因为有个东西叫object.creat(原型) 这个函数可以构造以这个原型为父元素的对象。这个括号里面的原型必须填写,且只能填写对象和null;可以为null。
原型
obj.__proto__={name:"sunny"};
console.log(obj.name);
//此时会输出undefined
说明proto是隐式的内部属性,自己写系统是不认地
var obj=object.creat(null);
document.write(obj);
//此时会报错,因为document.write()在打印的时候会调用toString()方法,没
//是不行的,会报错
var obj=object.creat(null);
obj.toString=function (){
return '建哥身体好';
}
document.write(obj);
//此时就会打印 建哥身体好
在javascript中 可正常计算的范围为 前16位 后16位
call&&apply
作用有:
- 改变this指针的指向;
function Person(){
//this==>obj
this.name='jiange';
this,sge=21;
}
var person = new Person();
var obj ={
}
Person.call(obj,'wang',300);
//此时就相当于构造了一个obj对象 它有name和age属性 值为wang和300
- 可以借调其它对象的属性调用给自己
function Preson(name,age,sex){
this.name=name;
this.age=age;
this.sex=sex;
}
function Student(name,age,sex,tel,grade){
//这里要用this 因为要使调用后的给自己所以要为this
Person(this,name,age,sex);
this.tel=tel;
this.grade=grade;
}
var student = new Student('sunndy',10,'mael',139,2017)call
call和apply的区别
- 首先拼写有差异,单词不一样;
- call可以一位一位的传参数,而apply不行,apply只能传数组 如person.apply(this,[height,width]),剩余的二者都一样。