-
对象的原型:原型是function对象的一个属性,定义了构造函数制造出的对象的公共祖先。通过该原型构造出的构造函数,可以继承原型的属性。
function Person(){
}
var person=new Person;
Person.prototype➡原型
Person.prototype{ };原型对象,可被构造出的对象继承
原型和本身属性冲突的时候取自己的属性,没有该属性选择继承原型属性。
利用原型的特点和概念,可以提取公有属性。 -
原型的增删改查
通过自身不可以操作原型上的属性。只能通过prototype来操作 -
在原型内部自带的属性construct和__proto__
proto:指向原型。****(重点复习一下) -
原型链:Object.prototype为终端
增删改只能通过自身来操作。
对象字面量和构造函数相同,应用开发中,数组和对象使用对象字面量的形式。
var obj={ };
obj.proto=Object.prototype
obj.constructor=Object( );
var obj = Object.creat(原型.prototype);
绝对多数对象的最终都继承自Object.prototype:并不是所有, Object.creat()就是例外。
var obj = Object.creat(null);无原型,不可以自己定义原型链。
undefined和null不可以调用toString()方法。
数字.toString();会被识别为浮点型,报错。
Number.prototype.proto=Object.prototype
Number 和Object上面都有toString方法,Number重写了toString。
类似的,Array Boolean String 上面也有重写toString。
随机数取整:Math.floor(Math.random()*10);
JavaScript的计算精度:前十六位,后十六位。 -
call/apply
call/apply:改变this指向:利用其他函数实现自己功能。
call:需要把实参按照形参的个数传进去
apply:需要传一个arguments -
继承
继承发展史:1.传统形式,即原型链,过多的继承了无用的属性。
2.借用构造函数,不能继承借用构造函数的原型,每次构造都要多走一个函数。(完全囊括的情况下适用)
3.共享原型,不能随便改变自己的原型,会改变其他函数的原型,因多个构造函数使用同一个原型。
4.圣杯模式,function F( ) { }
F.prototype = Father.prototype//中间层。
Son.prototype=new F( );// new之前改原型。
私有化变量的应用,结合闭包:没搞懂,存疑。 -
命名空间问题
命名空间:比较古老的方法。
闭包:防止污染全局变量。 -
属性的表示方法
obj.name等同于obj[‘name’],中括号里面必须为字符串。可以实现属性名的拼接。 -
枚举:遍历对象的属性值
for in 循环中枚举的属性要写成方括号形式。
-1.hasOwnProperty(属性名)用来检查是否是自己的属性方法。
手动设置的原型会被遍历出来,系统自带的不会被遍历出来
-2.in 判断属性能不能被调用,原型上的也会被调用。
-3. A instanceof B: 判断A 对象是不是B构造函数构造出来的,深层原理:看A的原型链上有没有B的原型。 -
区分数组和对象的三种方法
-1. [].constructor Array {}.constructor Object
-2. [] instanseof Array ==>true
{} instanseof Array false
-3. Object.prototype.toString.call( [] ) ; [object Array]
Object.prototype.toString.call( {} ) ; [object Object]
原型 原型链 call apply 继承 命名空间 对象枚举
猜你喜欢
转载自blog.csdn.net/qq_43335204/article/details/83029656
今日推荐
周排行