解决constructor属性的问题

function Person(){}
Person. prototype .dance = function(){};
function Ninja(){}
Ninja. prototype = new Person( );
object. defineProperty(Ninja. prototype, " constructor", {
enumerable: false,
value: Ninja,
writable: true								←---定义一个 新的不可枚举的constructor属性,属性值为Ninja
});
var ninja = new Ninja();
assert(ninja . constructor === Ninja, 
"Connection from ninja instances to Ninja constructor
reestablished!");
←--- 重新建立ninja实例与Ninja构造器的联系
for(let prop in Ninja. prototype){
assert(prop === "dance", "The only enumerable property is dance!");
←---在Ninja. prototype.上没有定义可枚举的属性
}

现在执行代码,重新建立了ninja实例与Ninja构造器之间的联系,所以可以确定ninja实例是通过Ninja构造器创建的。此外,如果遍历Ninja.prototype对象,可 确保不会访问到constructor属性。现在这是-一个真正的“忍者”,进去完成工作,然后离开,不引起任何人的注意!

在ES6中 实现继承

class Person {
constructor( name){
this.name = name;
	}
	dance(){
	return true;
	}
}
class Ninja extends Person {			--- 使用关键字extends实现继承
constructor(name, weapon){
super(name) ;							---_使用关键字super调用基类构造函数
this . weapon = weapon;
	}
wieldWeapon(){
return true;
	}
}
var person = new Person(" Bob");
assert( person instanceof Person,' "A person's a person" );
assert( person. dance( ),' 'A person can dance.");
assert( person. name === "Bob", "We can call it by name.");
assert(!(person instanceof Ninja), "But it's not a Ninja" );
assert( !("wieldWeapon" in person), "And it cannot wield a weapon") ;
var ninja = new Ninja( "Yoshi", "Wakizashi");
assert(ninja instanceof Ninja, "A ninja's a ninja");
assert(ninja. wieldWeapon(), "That can wield a weapon"); .
assert(ninja instanceof Person, "But it's also a person");
assert(ninja.name === "Yoshi","That has a name");
assert(ninja.dance(),"And enjoys dancing" );
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值