JS 面向对象之神奇的prototype-javascript技巧
1、什么是prototype
定义:在JavaScript中,每个对象都有一个属性叫做__proto__
,这个属性指向了该对象的原型。
作用:通过原型可以实现对象的属性和方法的继承,当访问一个对象的属性或方法时,如果对象本身没有这个属性或方法,JavaScript会沿着原型链向上查找,直到找到该属性或方法或者达到原型链的顶端Object.prototype。
2、prototype使用技巧
动态添加属性和方法:可以直接通过赋值操作为对象的prototype添加属性和方法。
var AClass = function() { this.property = 5; }; AClass.prototype.Method = function() { alert(5); }
实现继承:将一个类的实例赋值给另一个类的prototype,从而实现继承效果。
var ClassA = function() { this.a = "a"; }; var ClassB = function() { this.b = "b"; }; ClassB.prototype = new ClassA(); var objB = new ClassB(); alert(objB.a); // 输出 a alert(objB.b); // 输出 b
利用原型链设置默认值:可以为对象的属性设置默认值,当删除对象本身的属性后,原型属性就恢复了可见性。
function Point(x, y) { if (x) this.x = x; if (y) this.y = y; } Point.prototype.x = 0; Point.prototype.y = 0; var p1 = new Point; var p2 = new Point(1, 2);
只读getter:可以为对象的属性设置一个只读的getter,从而避免它被改写。
function classA() { this._a = 100; } classA.prototype.get a() { return this._a; } var a = new classA(); alert(a.a); // 输出 100 a.a = 200; alert(a.a); // 仍然输出 100
相关问题与解答
1、问题一:如何理解JavaScript中的原型链?
解答:原型链是由JavaScript中的对象和其原型之间构成的链式关系,每个对象都有一个内部属性[[Prototype]](在浏览器环境中通常被称为__proto__),这个属性指向了对象的原型,当访问对象的属性或方法时,如果对象本身没有这个属性或方法,JavaScript会沿着原型链向上查找,直到找到该属性或方法或者达到原型链的顶端Object.prototype,原型链的构建是通过将一个对象的prototype属性设置为另一个类型的实例来实现的。
2、问题二:如何在JavaScript中实现继承?
解答:在JavaScript中,可以通过修改一个类的prototype属性来实现继承,具体做法是将一个类的实例赋值给另一个类的prototype,这样新创建的类就会继承原类的所有属性和方法。
var ClassA = function() { this.a = "a"; }; var ClassB = function() { this.b = "b"; }; ClassB.prototype = new ClassA(); var objB = new ClassB(); alert(objB.a); // 输出 a alert(objB.b); // 输出 b
在这个例子中,ClassB继承了ClassA的属性a。
以上就是关于“JS 面向对象之神奇的prototype-javascript技巧”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!