NullReferenceException: Object Reference Not Set To An Instance Of An Object

So I have a script that I have put onto a weapon, which is parented to the player’s hand. The player game object has a script called PlayerClass that has the list of stats for te player. when the weapon hits an enemy, the weapon script is called:

using UnityEngine;
using System.Collections;

public class WeaponAttackScript : MonoBehaviour 
	public delegate void WeaponHit ();  /*this is necessary for the event*/
	public static event WeaponHit OnHit;  /*sets up the event so that we know when the weapon hits an enemy*/

	// Use this for initialization
	void Start () 
	// Update is called once per frame
	void Update () 


	void OnTriggerEnter(Collider enemyCollider)   /*trigger allows us to avoid the terrain-flying bug.*/

			PlayerClass playerStats = this.gameObject.transform.parent.GetComponent<PlayerClass>(); /*for getting player's strength*/
			InventoryItemClass weaponType = GetComponent<InventoryItemClass>();/*the item class, needed for
			getting the base damage*/
			EnemyTypeClass enemyType = enemyCollider.gameObject.GetComponent<EnemyTypeClass>(); /*references
			enemy's type to get armour rating (see next line)*/
			float enemyArmourRating = enemyType.armourRating; /*self-explanatory*/
			float baseDamage =  weaponType.itemDamage;        /*"*/
			float attackerStrength = playerStats.strength;    /*"*/
			float damageDealt = (baseDamage/enemyArmourRating)*(attackerStrength/100.0f);
			if (PlayerClass.isAttacking == true)  /*just need to sort out the double-hit issue*/
            { = - damageDealt;
				OnHit ();
				Debug.Log ("Hit for " + damageDealt + " damage");


but when I hit the enemy, this error message pops up:

NullReferenceException: Object reference not set to an instance of an object
WeaponAttackScript.OnTriggerEnter (UnityEngine.Collider enemyCollider) (at Assets/scripts/CombatScripts/WeaponAttackScript.cs:33)

where have I gone wrong?

Edit: I fixed it by using GetComponentInParent instead of this.gameObject.transform.parent.GetComponent, but I still wouldn’t mind knowing why the previous method didn’t work.

A duplicate of this one